DBSCAN算法

k-means在非凸数据集,不均衡数据集,异向数据集上的表现不好。(可看k-means算法),但BDSCAN算法很擅长处理这些数据集。

BDSCAN效果图1

k-means算法效果图1

BDSCAN效果图2
k-means算法效果图2

可以看到在这些数据集上DBSCAN效果比k-means好。

原理:
1.随机选择一个样本点开始,在半径r内如果有大于m个的其他样本,那么继续以这些样本为中心蔓延。
2.如果某样本半径r以内存在小于m个其他样本点,那么当前样本停止蔓延。
3.如果所有样本都停止蔓延,则完成一个聚类。如果还存在其他样本点没有归类,则选择一个没有归类的样本点重复步骤1。最终完成所有样本点的归类。
4.这里存在两个参数,r和m,如果r太小,则可能细分出太多类别;如果r太大,则会把属于不同类的点囊括进同类簇,造成错误。m太小,也容易把不同类的点囊括进同类簇;m太大,则会抛弃掉某些点,如“BDSCAN效果图2”最左边一列,因为只有一个点,而m为2,所以这些点都被抛弃了。

代码

from sklearn.cluster import DBSCAN
 
db = DBSCAN(eps=10, min_samples=2).fit(X)
 
labels = db.labels_ 

你可能感兴趣的:(DBSCAN算法)