初探DBSCAN聚类算法
Posted 山峰606
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初探DBSCAN聚类算法相关的知识,希望对你有一定的参考价值。
DBSCAN介绍
一种基于密度的聚类算法
他最大的优势是可以发现任意形状的聚类簇,而传统的聚类算法只能使用凸的样本聚集类
两个参数:
邻域半径R和最少点数目minpoints。
当邻域半径R内的点的个数大于最少点数目minpoints时,就是密集。
补充:根据经验计算半径R
根据得到的所有点的k-距离集合E,对集合E进行升序排序后得到k-距离集合E’,需要拟合一条排序后的E’集合中k-距离的变化曲线图,然后绘出曲线,通过观察,将急剧发生变化的位置所对应的k-距离的值,确定为半径Eps的值。
3种点的类别:核心点,边界点和噪声点。
邻域半径R内样本点的数量大于等于minpoints的点叫做核心点。不属于核心点但在某个核心点的邻域内的点叫做边界点。既不是核心点也不是边界点的是噪声点。
sklearn实例
官方文档 <---
生成样本点
import numpy as np
import pandas as pd
from sklearn import datasets
%matplotlib inline
X,_ = datasets.make_moons(500,noise = 0.1,random_state=1)
df = pd.DataFrame(X,columns = [\'feature1\',\'feature2\'])
df.plot.scatter(\'feature1\',\'feature2\', s = 100,alpha = 0.6, title = \'dataset by make_moon\')
调用dbscan接口完成聚类
from sklearn.cluster import dbscan
# eps为邻域半径,min_samples为最少点数目
core_samples,cluster_ids = dbscan(X, eps = 0.2, min_samples=20)
# cluster_ids中-1表示对应的点为噪声点
df = pd.DataFrame(np.c_[X,cluster_ids],columns = [\'feature1\',\'feature2\',\'cluster_id\'])
df[\'cluster_id\'] = df[\'cluster_id\'].astype(\'i2\')
df.plot.scatter(\'feature1\',\'feature2\', s = 100,
c = list(df[\'cluster_id\']),cmap = \'rainbow\',colorbar = False,
alpha = 0.6,title = \'DBSCAN cluster result\')
自己改的例子,比较好理解
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
%matplotlib inline
#生成数据
X=np.empty((100,2))
X[:,0]=np.random.uniform(0.,100.,size=100)
X[:,1]=0.75*X[:,0]+3+np.random.normal(0,10,size=100)
plt.scatter(X[:,0],X[:,1])
plt.show()
df=pd.DataFrame(X,columns=[\'feature1\',\'feature2\'])
df.plot.scatter(\'feature1\',\'feature2\')
print(df)
#调用DBSCAN接口完成聚类
from sklearn.cluster import dbscan
# eps为邻域半径,min_samples为最少点数目
core_samples,cluster_ids = dbscan(X, eps = 10, min_samples=3)
df = pd.DataFrame(np.c_[X,cluster_ids],columns = [\'feature1\',\'feature2\',\'cluster_id\'])
# df[\'cluster_id\'] = df[\'cluster_id\'].astype(\'i2\') #这个有啥用啊
df.plot.scatter(\'feature1\',\'feature2\', s = 100,
c = list(df[\'cluster_id\']),cmap = \'rainbow\',colorbar = False,
alpha = 0.6,title = \'DBSCAN cluster result\')
以上是关于初探DBSCAN聚类算法的主要内容,如果未能解决你的问题,请参考以下文章