链接:https://zhuanlan.zhihu.com/p/34640701
K-means
聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为不同的类别,使类别内的数据比较相似,类别间的数据相似度比较小,是一种无监督学习算法。
聚类算法的重点是计算样本项之间的相相似度。
相似度
- 闵可夫斯基距离:
- 欧式距离:
- KL距离(相对熵):
- 杰卡德相似系数:
- Pearson相关系数:
K-Means算法
K-Means算法,也称K-均值,是一种使用广泛的最基础的聚类算法
算法步骤为
- 选择初始化的k个样本作为初始聚类中心
- 针对数据集中每个样本 计算它到K个聚类中心的距离并将其分到距离最小的聚类中心所对应的类中
- 针对每个类别 ,重新计算它的聚类中心 (即属于该类的所有样本的质心)
- 重复上面两步操作,直到达到某个中止条件
中止条件
- 迭代次数、最小平方误差MSE,簇中心变化率
K-means算法的缺点:
- K值是用户给定的,在进行数据处理前,K值未知,不同的K值得到的结果也不一样
- 对初始簇中心敏感
- 不适合发现非凸形状的簇或者大小差别较大的簇
- 特殊值对模型的影响比较大
K-means算法的优点:
- 容易理解,聚类效果不错
- 处理大数据集的时候,该算法可以保证较好的伸缩性
- 当簇近似高斯分布的时候,效果非常不错
二分k_Means算法
二分K-means解决K-means算法对初始簇心比较敏感的问题,二分K-means算法是一种弱化初始质心的一种算法,具体思路步骤如下:
- 将所有样本数据作为一个簇放到一个队列中
- 从队列中选择一个簇进行K-means算法划分,划分为两个子簇,并将子簇添加到队列中
- 循环迭代第二步操作,直到中止条件达到(聚簇数量,最小平方误差,迭代次数等)
- 队列中的簇就是最终的分类簇集合
K_Means++算法
解决K-means算法对初始簇心 比较敏感的问题,K-means++算法和K-means算法的区别主要在于初始化K个中心点的选择方面,K-means算法使用随机给定的方式,K-means++算法采用下列步骤给定K个初始质心点:
- 从数据集中任选一个节点作为第一个聚类中心
- 对数据集中的每个点X,计算X到所有已有聚类中心点的距离和D(X),基于D(X)采用线性概率选择出下一个聚类中心点(距离较远的一个点成为新增的一个聚类中心点)
- 重复步骤2直到找到K个聚类中心点
K_MeansII 算法
K_MeansII 算法是为了解决K-means++算法缺点而产生的一种算法。
主要思路是改变每次遍历时候的取样规则,并非按照K-means++算法每次只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次,然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-means算法的初始聚簇中心点。实践证明:一般5次重复采样就可以保证一个比较好的聚簇中心点。
Canopy算法
Canopy算法属于一种“粗”聚类算法,执行速度快,单精度较低,算法执行步骤如下:
- 给定样本列表 以及先验值 和
- 从列表 中获取一个节点 ,计算 到所有聚簇中心点的距离(如果不存在聚簇中心,那么此时点 形成一个新的聚簇),并选择出最小距离
- 如果距离 小于 ,表示该节点属于该聚簇,添加到该聚簇列表中
- 如果距离 小于 ,表示该节点不仅仅属于该聚簇,还表示和当前聚簇中心点非常近,所以将该簇中心点设置为 ,并将 从列表 中删除
- 如果距离 大于 ,那么节点 形成一个新的聚簇
- 直到列表 中的元素数据不再有变化或者元素数量为0的时候,结束循环操作
由于K-means算法存在初始聚簇中心点敏感的问题,常使用Canopy+K-means算法混合形式进行模型构建
Mini Batch K_Means算法
Mini Batch k_Means算法是K_Means算法的一种优化变种,采用小规模的数据子集(每次训练使用的数据集是在训练算法的时候随机抽取的数据子集)减少计算时间,同时试图优化目标函数,Mini Batch k-Means算法可以减少K-Means算法收敛时间,而产生的结果只是略差于标准的K-Means算法
算法步骤
- 首先抽取部分数据集,使用K-Means算法构建出K个聚簇模型
- 集训抽取训练数据集中的部分数据集,并将其添加到模型中,分配给距离最近的聚簇中心点
- 更新聚簇的中心点
- 循环第二步和第三步操作,直到中心点稳定或者达到迭代次数,停止计算操作
聚类算法的平衡指标
均一性
完整性
V-measure
调整兰德系数(ARI)
调整互信息(AMI)
轮廓系数(Sihouette)