K-Means是机器学习算法中一个比较经典的聚类算法

具体的实现方式主要有三种:Lloyd(Forgy)Hartigan-WongMacQueen

Lloyd算法

Lloyd算法也可以称作Forgy或者Lloyd-Forgy,是最为经典简单的K-means迭代算法,其步骤如下:

1. 随机选取K个点作为初始的中心点

2. 计算每个点与K个中心点的K个距离(假如有N个点,就有N*K个距离值)

3. 分配剩下的点到距离其最近的中心点的类中,并重新计算每个类的中心点

4. 重复步骤2和步骤3

5. 直到达到收敛或者达到某个停止阈值(如最大计算时间)

用公式解释如下:

1. 把所有的点分配到K个类的系数r,属于第k个类的记为1,否则为0

2. 由上可知第k个类中的样本数量

3. 目标是最小化损失函数J

4. 计算每个点到中心点的距离,分配r的系数

5. 重新计算每个类的中心点

重复4和5指导收敛或者达到某个阈值

Lloyd算法的缺点是,聚类产生的类别经常是不平衡的,就是说不同类中样本的数量差异很大。这点会经常被忽略到,然而很多时候需要我们聚类出来是平衡的,例如对手写数字图像进行聚类的时候,我们有理由相信10个数字出现的频率是一样的,所以希望聚类后每个类中含有样本数量是相同的。像上述的手写数字图像聚类这个例子中 ,为获得更高的分类准确率,则需要平衡的聚类结果。另外,Lloyd算法是一个批量更新算法,因此会学习速度会相对较快。

MacQueen算法

MacQueen是一种在线更新的算法,只需要一次迭代,具体步骤如下:

1. 选取头K个点作为K个类的中心点

2. 选取下一个点计算与K个中心点的距离,选取距离最小的分配到该类中

3. 更新该类的中心点

4. 重复2,3直到所有的点分配完毕,达到收敛

MacQueen相对于Lloyd而言,总体的训练时间需要更久。

Hartigan-Wong算法

为了改进上述算法的不平衡问题,我们可以考虑用Hartigan-Wong算法,它也是一种在线更新的算法,具体如下:

1. 随机分配所有的点到K个类上,计算K个类的中心

2. 随机选择一个点,把它移出所属类

3. 重新计算有变化的类的中心

4. 把移出的点重新分配到其距离最近的中心点的类上

5. 循环所有的点,重复2,3,4

6. 进行第二次循环,重复2,3,4,5

7. 直到达到收敛或者某个停止阈值

其主要的不同点是在分配到K个类别的过程中,公式如下:

值得注意的是因为Hartigan-Wong算法多加了一个乘法项

因此算法更倾向于把样本分配给样本数量较少的类。但是这个乘法项并不是为了平衡而设计的,而是在把移除的点加入合适的类中而发生的类大小变化。

Hartigan-Wong算法相对于Lloyd来说是一种在线更新的算法,一般来讲可以获得更低的代价函数值,但是同样地会更慢。Lloyd的批量更新算法速度更快,效率更高。

参考文献:

1. 周旺,张晨麟,吴建鑫 “一种基于Hartigan-Wong和Lloyd的定性平衡聚类算法”山东大学学报(工学版)  第46卷第5期

2.https://datascience.stackexchange.com/questions/9858/convergence-in-hartigan-wong-k-means-method-and-other-algorithms

K-Means的三种迭代算法相关推荐

  1. 直立车模控制中三种滤波算法简单分析(清华卓晴)

    摘自:https://mp.weixin.qq.com/s/WbCh0NFAnsf9y2blQenf7g 让我想起余义的一篇文章也是说到平衡车有三种滤波,我想和卓晴说的是一样的吧. https://b ...

  2. python 三种聚类算法(K-means,AGNES,DBScan)

    python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 更新时间:2019年06月27日 14:44:44   作者:weixin_42134141 这篇文章主要介绍了pyth ...

  3. 常用的三种线性模型算法--线性回归模型、岭回归模型、套索回归模型

    常用的三种线性模型算法–线性回归模型.岭回归模型.套索回归模型 线性模型基本概念 线性模型的一般预测模型是下面这个样子的,一般有多个变量,也可以称为多个特征x1.x2.x3 - 最简单的线性模型就是一 ...

  4. Xdelta3 bsdiff Courgette三种差分算法比较

    今天介绍常用的三种差分算法,分别是Xdelta3 bsdiff Courgette. Xdelta3 官网地址: http://xdelta.org 源码地址:https://github.com/j ...

  5. 20172328 蓝墨云实验——三种查找算法练习

    20172328 蓝墨云实验--三种查找算法练习 课程:<软件结构与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强老师 实验日期:2018年10月1 ...

  6. 数值计算方法之1——三种迭代公式对比

    数值计算方法之1--三种迭代公式对比 说明 要求 Matlab实现 运行结果 三种迭代公式对比 说明 Matlab的版本为Matlab R2019b:这篇笔记的全部内容是基于上课时老师布置的小小小作业 ...

  7. 基于内容的推荐java代码_三种推荐算法简介:基于用户的协同过滤、基于物品的协同过滤、基于内容的推荐...

    1.推荐算法 1.1.协同过滤 协同过滤是目前应用最广泛的推荐算法,它仅仅通过了解用户与物品之间的关系进行推荐,而根本不会考虑到物品本身的属性. 可分成两类: 1.基于用户(user-based)的协 ...

  8. 近似装箱问题(三种联机算法实现)

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "近似装箱问题(三种联机算法实现)" 的idea 并用源代码加以实现: 0.2) 近似 ...

  9. 三种Hash算法对比以及秒传原理.

    三种Hash算法对比以及秒传原理 CRC (32/64)   MD5  Sha1 分5个点来说 1.校验值长度 2.校验值类别 3.安全级别 4.应用场景 1).校验值长度 CRC(32/64) 分别 ...

最新文章

  1. pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe )
  2. 暴风影音去广告链接和后台运行进程
  3. python计算平行线
  4. narwal无法连接机器人_懒无止境 能自己洗抹布的云鲸J1扫拖机器人
  5. Hadoop SSH免密登录公钥生成并实现不同主机间的免密登录
  6. Js String转Int(Number与parseInt的区别)
  7. 利用pylot进行性能测试
  8. JS-深入理解继承(非class方式与class继承)
  9. ubuntu下,apt的参数使用,很实用呦
  10. 我在一家通信公司上班
  11. 梦见有人追我我拼命逃
  12. 机器视觉基本设计因素有哪几点?
  13. 2016,我似乎明白了
  14. Vulnerable Javascript library
  15. StretchDIBits 的使用
  16. matlab泊松分布实现
  17. iconfont 多色图标使用介绍
  18. 还在花钱抢票?12306 已屏蔽60款抢票软件!
  19. 【云原生之K8s】 Pod基础概念
  20. SolidWorks学习笔记5创建基准面,基准线,基准点

热门文章

  1. 【剑桥摄影协会】软校样(Soft Proof):照片在屏幕显示与打印之间的效果匹配
  2. 云化数据中心发展历程回顾及金融与运营商对云化数据中心技术的要求
  3. android私密照片恢复,安卓手机照片被误删?这样设置一下,立马就能恢复
  4. 关于一个非寿险费率厘定例子的学习笔记
  5. 深圳财华社网络技术有限公司的产品开发情况---自我了解
  6. iNFTnews|沉浸式人工智能可能会重塑一切
  7. php输出csv和excel两种简单的方法,PHP导出csv和excel以及word的方法 | kTWO-个人博客...
  8. 使用跨平台的visual studio code 进行python 开发
  9. 网络爬虫,从上期所中爬取铜主力期货合约数据
  10. c++ IO中clear(flags)函数使用