DBSCAN是比较著名的基于密度的聚类方法,它可以轻松地得到各种形状的簇。
主要有两个参数,邻域半径 ϵ \epsilon ϵ 以及邻域内最少数据点数 m i n p t s minpts minpts .
python代码如下:
github地址
def dist(a, b):
m = a.shape[0]
n = b.shape[0]
res = np.zeros((m, n))
for i in range(m):
res[i] = np.sqrt(np.sum((a[i] - b) ** 2, axis=1))
return res
def dbscan(data, eps, minpts):
dis = dist(data, data) # 求两两之间距离
n = data.shape[0] # 样本数
k = 0 # 类编号
visit = np.zeros(n) # 是否被访问过
res = np.zeros(n