MeanShift聚类-01原理分析
作者:互联网
Intro
工作中用到了meanshift,不追溯太复杂的原理以及各种算法变体,原始paper等等。只从概念上,对原理做简要的总结和介绍。主要逻辑,参考sklearn的源码。
和常用k-means一样,meanshift也是一个迭代算法。我们关注的无非以下几点:
- 迭代的逻辑,按照什么方式进行迭代
- 迭代终止的条件
- 怎么给样本打label
主要逻辑
sklearn的代码逻辑如下:
- 初始化:生成bandwidth和seeds。如果没有指定bandwidth和seeds,会根据样本生成
- 并行化完成所有seeds的迭代,每个seed相当于是一个单独的迭代过程
- 迭代终止条件:max_iter=300或者阈值小于1e-3 * bandwidth
- 首次迭代时,seed就是聚类中心点,获取中心点bandwidth范围内的所有样本点
- 重新计算中心点(即求均值),再执行上一步,直到满足迭代停止条件
- 聚类中心点合并
- 按照每个中心点覆盖样本数排序,依次计算各个中心点之间的距离
- 在bandwidth以内的两个中心点,保留覆盖样本数高的中心点
- 给样本打label
- 找到每个样本附近最近的中心点,则改样本就归属于该类
- cluster_all=False,则bandwidth之外的点命名为-1,否则还是最近的聚类中心
Ref
[1] https://scikit-learn.org/stable/modules/generated/sklearn.cluster.MeanShift.html
2021-03-29 于南京市江宁区九龙湖
标签:01,迭代,样本,MeanShift,bandwidth,seeds,中心点,聚类 来源: https://blog.csdn.net/wendaomudong_l2d4/article/details/115398566