DBSCAN算法
DBSCAN算法是基于密度进行聚类的,根基任何画出指定的半径园,是否满足minpts判断是不是核心对象,可以不用事先指定簇,可以分出形状
- 核心对象: 若某个点的密度达到算法设定的值视为核心点(即r邻域内点的数量不小于minPts)
- E-邻域距离阈值: 设定的半径
- 直接密度可达: p在q的r的邻域内(p在以q点设定半径下的圆内,则称p-q直接密度可达)
- 密度可达: 若p-q直接密度可达,f-p直接密度可达,f-q直接密度不可达,则称f-q密度可达
算法原理: 选取一个核心点画圆,在圆内的点满足minpts个数,在这些点依次画圆,重复以上,结束后若没有在圆内的点称为噪声点
二、 代码举例
db = skc.DBSCAN(eps = ,min_samples = ).fix(x)
#eps为E-邻域距离阈值(半径长) min_samples为minPts
#x为[[data1,data2……],[],[],[]……]
labels = db.labels_
#返回数据标签(若标签值为-1,则代表该点数据为噪声点)
lables[:] = -1
#判断lables截取的长度内每个值是否等于-1,等于返回True,不等于返回False,如lables = [1,5,8,-1,4,-1] 运行lables[1:6] 判断序号1到5内的元素是否为-1并依次返回boolean到序号为组成新的列表,结果为
[False,False,True,False,True]
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
#统计有几类有效簇(-1要除去因为是噪声点),set函数查重返回无序的无重复的集合,len返回set函数后的集合得到一共分成几个簇
1 if -1 in labels else 0 表示如果-1在内表示有噪声点不是有效点所以要减去1