本文参考资料为:《交通时空大数据分析、挖掘与可视化(python版)》余庆,李玮峰编著,清华大学出版社
基于划分的聚类(K-means)
- 随机初始化k个样本,作为初始聚类中心;
- 将每个样本分到距离最小的聚类中心所在类;
- 计算新的聚类中心位置
- 重新将样本划分到最小的聚类中心所在类
- 计算新的聚类中心位置
- 直到收敛
基于密度的聚类(DBSCAN)
- 直接密度可达:如图B在A的σ邻域内,则B是A关于σ和最小包含点数MinPts的“直接密度可达”
- 密度可达:如果两个点不是“直接密度可达”,但可以通过多个“直接密度可达”的关系到达,则可称为“密度可达”,比如AC密度可达
- 密度相连:如果两个点不是“密度可达”,但可以通过多个“密度可达”的关系到达,则可称为“密度相连”,比如ABC并集内的点都是密度相连
- K-means和DBSCAN对比
基于层次的聚类(Hierarchical)
通过某种相似性测度计算节点或类簇之间的相似性(或距离),并依据分裂或凝聚方式构建树状图,再根据实际需求横切树状图。
基于密度与基于层次的聚类(HDBSCAN)
但是上述方法都有缺陷:合适的参数很难确定
如果你定义eps太小,那么就会把所有样本点识别为噪声点
如果定义eps太大,那么无法达到分类效果
然后HDBSCAN就使用了层次树方式来决定,我应该采用哪个参数(扫描半径eps和最小包含点数MinPts)
HDBSCAN相当于运行了所有扫描半径(eps)情况下的DBSCAN
这是DBSCAN,eps=0.01,0.02,0.03
如果是高维的数据,你很难直接用眼睛去一个个试一个个判断。
但是可以通过建立不同类别数量的树,来判断,
在大量数据面前,树将很复杂,所以剪枝,剪哪些?剪去哪些小于MinPts的类别数量的枝条
在计算点与点之间的距离时,不是采用欧式距离,而是采用netrual reach ability distance
也就是两个点不仅要求邻近,而且还要在同一个高密度区
左图,由于红圆和绿圆半径都小于红点与绿点的距离,那么这个d就取两样本点间的距离,
右图,由于蓝圆的半径要小于蓝点与绿点的距离,则这个d取这三个值中的最大值,也就是绿圆半径。
DBSCAN 和 HDBSCAN 对比
import hdbscan
clusterer = hdbscan.HDBSCAN(min_cluster_size=5, gen_min_span_tree=True)
clusterer.fit(test_data)