机器学习之聚类——DBSCAN演绎组织的形成

简介: 机器学习之聚类——DBSCAN演绎组织的形成

引子

       有一个叫DBSCAN聚类的诸侯国,他是密度聚类联盟的成员。这里的人都有一个共识,组织才是王道,一开始,一个人就是一个组织,互不相识,后来,有些人周围有了一些朋友,他们发现能从其他人那里得到一些不一样的信息,而这些信息有时就会带来一个商机,于是他们又结识了朋友的朋友,再后来,他们把朋友、朋友的朋友、朋友的朋友的朋友........都叫到一起,彼此合并成立了一个组织,进入该组织的人不能再进入其他组织。于是,这个国家里面形成了很多组织,不需要国家指定组织的个数,这些组织是根据远近关系自发形成的。对于组织内部的成员,结识的朋友足够多时,便可以成为核心成员。组织有强有弱,但是不会彼此吞并,这样可以使国家有一个很稳定的政治局面。当然,当组织人数太少的时候,它就相当于一个噪声,毫无话语权。

       这便是这个国家的国情,是不是跟我们的世界有些许相似呢!上面试图以一种通俗的表达来阐述DBSCAN的原理,下面给出严谨而简略的叙述,来,上概念!

DBSCAN原理

基础概念如下:      

算法流程如下:

       详细讲述DBSCAN原理的文章很多,这里只是做了简单的总结以及个人理解,不过瘾的读者可以深入研究。下面上案例!

案例:对特殊形状区域数据的聚类

代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors
from sklearn.cluster import DBSCAN
 
 
 
if __name__ == "__main__":
    # 数据
    t = np.arange(0, 2*np.pi, 0.1)
    data1 = np.vstack((np.cos(t), np.sin(t))).T
    data2 = np.vstack((2*np.cos(t), 2*np.sin(t))).T
    data3 = np.vstack((3*np.cos(t), 3*np.sin(t))).T
    data = np.vstack((data1, data2, data3))
    # 参数:(领域半径, 核心对象在领域半径中的最小邻居数),这里准备多组参数,用于对比
    params = ((0.5, 3), (0.5, 5), (0.5, 10), (1., 3))
    # 绘图准备
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['axes.unicode_minus'] = False
    plt.figure(figsize=(9, 7), facecolor='w')
    plt.suptitle('DBSCAN聚类应用', fontsize=15)
    # 遍历所有参数
    for i in range(4):
        eps, min_samples = params[i]
        # 构建模型并对数据进行聚类
        model = DBSCAN(eps=eps, min_samples=min_samples)
        model.fit(data)
        y_hat = model.labels_
        # 统计簇的个数
        y_unique = np.unique(y_hat)
        n_clusters = y_unique.size
        print('聚类簇的个数为:', n_clusters)
        # 绘制聚类结果
        plt.subplot(2, 2, i+1)
        plt.scatter(data[:, 0], data[:, 1], s=40, c=y_hat, cmap=plt.cm.Spectral, edgecolors="k")
        plt.grid(visible=True, ls=":", color="#808080")
        plt.title(r'$\epsilon$ = %.1f  m = %d,聚类数目:%d' % (eps, min_samples, n_clusters), fontsize=12)
    plt.tight_layout()
    plt.subplots_adjust(top=0.9)
    # plt.show()
    plt.savefig('dbscan.png', dpi=800)

运行结果如下:

 

作者这水平有限,有不足之处欢迎留言指正

相关文章
|
8天前
|
机器学习/深度学习 算法 搜索推荐
机器学习中的聚类
**文章摘要:** 本文介绍了聚类算法的基本概念、应用、实现流程和评估方法。聚类是一种无监督学习技术,用于将数据分为相似的组,如K-means、层次聚类、DBSCAN和谱聚类。K-means算法通过迭代优化质心,将数据点分配到最近的簇,直至质心不再变化。模型评估包括误差平方和(SSE)、肘部方法(确定最佳簇数)和轮廓系数法(Silhouette Coefficient),以量化聚类的紧密度和分离度。应用场景涵盖用户画像、广告推荐和图像分割等。在Python的sklearn库中,可以使用KMeans API进行聚类操作。
|
2天前
|
机器学习/深度学习 分布式计算 算法
在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)
【6月更文挑战第28天】在机器学习项目中,选择算法涉及问题类型识别(如回归、分类、聚类、强化学习)、数据规模与特性(大数据可能适合分布式算法或深度学习)、性能需求(准确性、速度、可解释性)、资源限制(计算与内存)、领域知识应用以及实验验证(交叉验证、模型比较)。迭代过程包括数据探索、模型构建、评估和优化,结合业务需求进行决策。
5 0
|
2天前
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
|
8天前
|
机器学习/深度学习 算法 搜索推荐
机器学习聚类算法
聚类算法是无监督学习技术,用于发现数据集中的自然群体,如用户画像、广告推荐等。常见的聚类算法包括K-Means,它基于距离分配样本至簇,适合球形分布;层次聚类则通过合并或分裂形成簇,能发现任意形状的簇;DBSCAN依据密度来聚类,对噪声鲁棒。KMeans API中`sklearn.cluster.KMeans(n_clusters=8)`用于指定簇的数量。评估聚类效果可使用轮廓系数、SSE等指标,Elbow方法帮助选择合适的K值。
|
8天前
|
机器学习/深度学习 算法 数据挖掘
机器学习之聚类——MeanShift算法和图像矢量量化
机器学习之聚类——MeanShift算法和图像矢量量化
9 0
|
8天前
|
机器学习/深度学习 算法 数据挖掘
机器学习之聚类——从教授的等式到凸聚类
机器学习之聚类——从教授的等式到凸聚类
9 0
|
8天前
|
机器学习/深度学习 存储 算法
机器学习之聚类——双聚类简介及简单案例
机器学习之聚类——双聚类简介及简单案例
6 0
|
3天前
|
数据采集 机器学习/深度学习 算法
机器学习方法之决策树算法
决策树算法是一种常用的机器学习方法,可以应用于分类和回归任务。通过递归地将数据集划分为更小的子集,从而形成一棵树状的结构模型。每个内部节点代表一个特征的判断,每个分支代表这个特征的某个取值或范围,每个叶节点则表示预测结果。
11 1
|
7天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
129 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
7天前
|
机器学习/深度学习 人工智能 算法
算法金 | 统计学的回归和机器学习中的回归有什么差别?
**摘要:** 统计学回归重在解释,使用线性模型分析小数据集,强调假设检验与解释性。机器学习回归目标预测,处理大数据集,模型复杂多样,关注泛化能力和预测误差。两者在假设、模型、数据量和评估标准上有显著差异,分别适用于解释性研究和预测任务。
37 8
算法金 | 统计学的回归和机器学习中的回归有什么差别?