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


活动地址:CSDN21天学习挑战赛

引子

        有一个叫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)

运行结果如下:

 


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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥猪猪爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值