聚类-dbscan

一、算法原理

根据距离和密度来聚类

  1.  选取起始点,如果所有点都已经当选过起始点或者已经纳入类别,则停止
  2.  将跟选取点距离小于一定阈值的点纳入一个集合
  3.  如果步骤2的点个数大于一定数值,则纳为一个类别,并且在这个类别中再选取一个中心点然后进入步骤2,否则进入步骤1

二、Code

 1 from scipy.spatial import distance
 2 from sklearn.neighbors import NearestNeighbors
 3 from sklearn.cluster.dbscan_ import DBSCAN
 4 from sklearn.cluster.dbscan_ import dbscan
 5 import numpy as np
 6 
 7 from sklearn.cluster.tests.common import generate_clustered_data
 8 
 9 min_samples = 10
10 eps = 0.0309
11 
12 X = generate_clustered_data(seed=1, n_samples_per_cluster=1000)
13 
14 D = distance.squareform(distance.pdist(X))
15 D = D / np.max(D)
16 core_samples, labels = dbscan(D, metric="precomputed", eps=eps,
17                               min_samples=min_samples)

三、结果

有图可得,这种类型的聚类其实用DBSCAN并不是很好,不如kmeans。DBSCAN更适合环状的聚类,或者高密度的形状聚类

猜你喜欢

转载自www.cnblogs.com/ylxn/p/11822889.html