K-means 是我们最常用的基于欧式距离的聚类算法,其认为两个目标的距离越近,相似度越大。其算法步骤为:
那么这里就会引现出几个问题,
初始簇类中心如何选择
值的选择
距离最近原则具体指什么
怎么更新簇类中心
判断簇类收敛到不再改变的条件是什么?
初始簇类中心如何选择
选择初始类簇中心点对于聚类效果的好坏有很大的影响,那么我们该如何去确定簇类中心呢?
1.随机选取
随机选取是最简单的方法,但是也是有技巧的,我们通过对数据的预估来进行观察,从而确定初始的K值,比如说二维平面上的点,我们可以通过将其可视化到二维平面进行肉眼的判断,从而确定k值;比如说对于一些利用特征值进行聚类的数据,我们依旧可以将其进行量化到二维或者三维空间中,当然对于高维数据,首先可以进行降维操作,继而进行可视化。
2.初始聚类
选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为KMeans算法初始类簇中心点。
常用的层次聚类算法有BIRCH,ROCK,Canopy算法。
层次聚类的思想是:一层一层地进行聚类,可以从下而上地把小的cluster合并聚集,也可以从上而下地将大的cluster进行分割。似乎一般用得比较多的是从下而上地聚集,这里我们说下自下而上的聚类。所谓从下而上地合并cluster,具体而言,就是每次找到距离最短的两个cluster,然后进行合并成一个大的cluster,直到全部合并为一个cluster。整个过程就是建立一个树结构,类似于下图。
3.平均质心距离的加权平均值
首先随机选出一个点,然后选取离这个点距离最大的点作为第二个点,再选出离这两个点距离最小值最大的点作为第三个点,以此类推选出 个点
** 值的选择**
这里我们需要调试 值对于结果进行评测,从而判断最优 值,并将其应用到实际的模型中。
给定一个合适的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升。
距离最近原则具体指什么
欧氏距离
曼哈顿距离
切比雪夫距离
马氏距离
夹角余弦
汉明距离
杰卡德距离
相关系数
信息熵
https://blog.csdn.net/gamer_gyt/article/details/75165842
** 怎么更新簇类中心**
求平均值,需要说明一点的是这里的平均值并不一定是实实在在存在的数据,很大程度上就是虚拟的一个数据,比如说我们对二维平面上的点进行聚类时,更新簇类中心就不是原数据中的某个点,同样对于用户对item进行评分时的数据聚类,更新簇类中心后的item也并不是一个真正的item,而是虚拟出的一个。
判断簇类收敛到不再改变的条件是什么?
一般情况下判断聚类stop的条件是 聚类结果不再发生变化,但是对于始终无法停止的聚类的数据,就要额外的添加一些约束条件来迫使停止聚类,比如说更新簇类中心前后的新旧簇类中心相似度大于90%,距离小于10%等
优缺点
优点
容易理解,聚类效果不错,虽然是局部最优, 但往往局部最优就够了
处理大数据集的时候,该算法可以保证较好的伸缩性
当簇近似高斯分布的时候,效果非常不错
算法复杂度低
缺点
值需要人为设定,不同 值得到的结果不一样
对初始的簇中心敏感,不同选取方式会得到不同结果
对异常值敏感
样本只能归为一类,不适合多分类任务
不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类