K-MEANS


链接:https://zhuanlan.zhihu.com/p/34640701


K-means
 

聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为不同的类别,使类别内的数据比较相似,类别间的数据相似度比较小,是一种无监督学习算法。

聚类算法的重点是计算样本项之间的相相似度。

相似度

  • 闵可夫斯基距离: dist(X,Y) = \sqrt[p]{\sum_{i=1}^{n}{\left| x_{i} - y_{i} \right|^{p}}}
  • 欧式距离: dist(X,Y) = \sqrt{\sum_{i=1}^{n}(x_i-y_i)^2}
  • KL距离(相对熵): D(P||Q)=\sum_{x}P(X)log(\frac{P(x)}{Q(x)})
  • 杰卡德相似系数: J(A,B) = \frac{\left| A\cap B \right|}{\left| A\cup B \right|} ;dist(A,B) = 1 - J(A,B)
  • Pearson相关系数: \beta_{XY} = \frac{\sum_{i=1}^{n}(X_{i} - \mu_{X})(Y_{i} - \mu_{Y})}{\sqrt{\sum_{i=1}^{n}(X_{i} - \mu_{X})^2} * \sqrt{\sum_{i=1}^{n}(Y_{i} - \mu_{Y})^2}} ; dist(X,Y) = 1 - \beta_{XY}

 

K-Means算法

K-Means算法,也称K-均值,是一种使用广泛的最基础的聚类算法

算法步骤为

  • 选择初始化的k个样本作为初始聚类中心 c=\left\{ {a_1,a_2,...,a_k} \right\}
  • 针对数据集中每个样本 x_i 计算它到K个聚类中心的距离并将其分到距离最小的聚类中心所对应的类中
  • 针对每个类别 a_j ,重新计算它的聚类中心 a_j=\frac{1}{\left| c_i \right|}\sum_{x\in c_i}x (即属于该类的所有样本的质心)
  • 重复上面两步操作,直到达到某个中止条件

中止条件

  • 迭代次数、最小平方误差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算法属于一种“粗”聚类算法,执行速度快,单精度较低,算法执行步骤如下:

  • 给定样本列表 L=x_1,x_2,...,x_m 以及先验值 r_1r_2(r_1>r_2)
  • 从列表 L 中获取一个节点 P ,计算 P 到所有聚簇中心点的距离(如果不存在聚簇中心,那么此时点 P 形成一个新的聚簇),并选择出最小距离 D(P,a_j)
  • 如果距离 D 小于 r_1 ,表示该节点属于该聚簇,添加到该聚簇列表中
  • 如果距离 D 小于 r_2 ,表示该节点不仅仅属于该聚簇,还表示和当前聚簇中心点非常近,所以将该簇中心点设置为 P ,并将 P 从列表 L 中删除
  • 如果距离 D 大于 r_1 ,那么节点 P 形成一个新的聚簇
  • 直到列表 L 中的元素数据不再有变化或者元素数量为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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值