聚类算法(一)——DBSCAN

相关聚类算法

聚类算法(一)——DBSCAN

聚类算法(二)—— 优缺点对比

聚类算法(三)—— 评测方法1

聚类算法(三)—— 评测方法2

聚类算法(三)—— 评测方法3(代码)

聚类算法(四)—— 基于词语相似度的聚类算法(含代码)

聚类算法(五)——层次聚类 linkage (含代码)

聚类算法(六)——谱聚类 (含代码)

 

---------------------------------------------------

 

参考链接

https://blog.csdn.net/huacha__/article/details/81094891

https://baike.baidu.com/item/DBSCAN/4864716?fr=aladdin

 

DBSCAN 为密度聚类的无监督方法。

DBScan需要二个参数: 扫描半径 (eps)和最小包含点数(minPts)。 任选一个未被访问(unvisited)的点开始,找出与其距离在eps之内(包括eps)的所有附近点。

DBSCAN对用户定义的参数很敏感,细微的不同都可能导致差别很大的结果,而参数的选择无规律可循,只能靠经验确定。

 

算法原理

 

下面这些点是分布在样本空间的众多样本,现在我们的目标是把这些在样本空间中距离相近的聚成一类。我们发现A点附近的点密度较大,红色的圆圈根据一定的规则在这里滚啊滚,最终收纳了A附近的5个点,标记为红色也就是定为同一个簇。其它没有被收纳的根据一样的规则成簇。(形象来说,我们可以认为这是系统在众多样本点中随机选中一个,围绕这个被选中的样本点画一个圆,规定这个圆的半径以及圆内最少包含的样本点,如果在指定半径内有足够多的样本点在内,那么这个圆圈的圆心就转移到这个内部样本点,继续去圈附近其它的样本点,类似传销一样,继续去发展下线。等到这个滚来滚去的圈发现所圈住的样本点数量少于预先指定的值,就停止了。那么我们称最开始那个点为核心点,如A,停下来的那个点为边界点,如B、C,没得滚的那个点为离群点,如N)。

 

kmeans聚类算法只能处理球形的簇,也就是一个聚成实心的团(这是因为算法本身计算平均距离的局限)。但往往现实中还会有各种形状,比如下面两张图,环形和不规则形,这个时候,那些传统的聚类算法效果就会差一些。基于样本密度的DBSCAN算法就会取得较好的效果。

具体算法描述

(1)检测数据库中尚未检查过的对象p,如果p未被处理(归为某个簇或者标记为噪声),则检查其邻域,若包含的对象数不小于minPts,建立新簇C,将其中的所有点加入候选集N

(2)对候选集中所有尚未被处理的对象q,检查其邻域,若至少包含minPts个对象,则将这些对象加入N;如果未归入任何一个簇,则将加入C

(3)重复步骤2),继续检查中未处理的对象,当前候选集N为空

(4)重复步骤1)~3),直到所有对象都归入了某个簇或标记为噪声。

优点

与K-means方法相比,DBSCAN不需要事先知道要形成的簇类的数量。

与K-means方法相比,DBSCAN可以发现任意形状的簇类。

DBSCAN能够识别出噪声点。

DBSCAN对于数据库中样本的顺序不敏感,即Pattern的输入顺序对结果的影响不大。但是,对于处于簇类之间边界样本,可能会根据哪个簇类优先被探测到而其归属有所摆动。

缺点

1. DBScan不能很好反映高维数据。

2. DBScan不能很好反映数据集以变化的密度。

3. 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差

代码

import pandas as pd

df = pd.read_csv('data.txt', sep=' ')
from sklearn.cluster import DBSCAN

X = df[["calories", "sodium", "alcohol", "cost"]]
# 设置半径为10,最小样本量为2,建模
db = DBSCAN(eps=10, min_samples=2).fit(X)  # eps 参数设置调节密度, 通过eps参数调节达到比较好的聚类效果,具体需要根据聚类样本分布确定

labels = db.labels_
df['cluster_db'] = labels  # 在数据集最后一列加上经过DBSCAN聚类后的结果
df.sort_values('cluster_db')

# 查看根据DBSCAN聚类后的分组统计结果(均值)
print(df.groupby('cluster_db').mean())

 注:eps 参数设置调节密度, 通过eps参数调节达到比较好的聚类效果,具体需要根据聚类样本分布确定

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

微知girl

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

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

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

打赏作者

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

抵扣说明:

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

余额充值