本文意图

  1. 结合目标函数,了解 k-means步骤和每一步的目的
  2. 如何避免陷入局部最优
  3. 如何使聚类出的簇更加平衡

目录

本文意图

第一部分  K-Means步骤

1.1 什么是聚类?

1.2 K-Means详细步骤

1.2.1 目标函数

1.2.2 随机初始化簇心

1.2.3 数据点分簇

1.2.4 重新计算簇心

1.2.5 迭代过程

第二部分 避免局部最优

2.1 随机初始化会导致什么问题?

2.2 用实验说明

2.3 如何解决随机结果不好的问题?

2.4 实验中的一些其他细节

2.4.1 “距离”度量方式

2.4.2 簇心数量K的选取

第三部分 平衡聚类

3.1 -balance聚类

3.2 平衡聚类应用场景

3.3 -balance方法一——在K-Means上改进

3.3.1 方法说明

3.3.2 例子

3.4 -balance方法二——阴阳K-Means加速重新分簇

3.4.1 阴阳K-Means

3.4.2 对于方法一的改进


第一部分  K-Means步骤

1.1 什么是聚类?

给定一组未加标签的数据集,希望通过算法自动将数据分成有紧密关联的子集或是簇。

假设我们采集到了一些牡丹花数据,但我们并不知道这些牡丹花具体是哪个品种的。植物学家想要按照特征的相似性,先大致对牡丹花进行粗分类,再对每个类别做具体细致的研究。此时,我们首先想到的就是无监督学习聚类算法。

1.2 K-Means详细步骤

1.2.1 目标函数

下面用一个简单的例子,对K-Means的步骤做说明。假设我们有一些二维样本点,最终聚类的结果如下图所示。K-Means算法是怎样将这些点聚成两个簇的呢?

1.2.2 随机初始化簇心

所有样本点一开始是没有被聚类的。将K取为2,即我们希望最终聚成2个簇。完成初始化簇心之后,我们随机选中了两个样本作为簇心。

1.2.3 数据点分簇

第一次分簇之后,我们将得到下图所示的2个簇

1.2.4 重新计算簇心

由于簇心是到簇内所有点距离相等的位置,因此在第一次分簇结束之后,簇心的位置会相应的发生改变。我们重新计算簇心位置,如下图所示:

1.2.5 迭代过程

重复1.2.3和1.2.4两个步骤,直到在重新计算簇心时,所有簇的簇心都不再变化为止。下面给出例子的后续操作,直到聚类完成。


第二部分 避免局部最优

2.1 随机初始化会导致什么问题?

  • 理想情况下,k-means算法会收敛到一个全局最优解上。下图就是一个我们希望看到的聚类结果。

  • 但如果随机初始化的结果不好,k-means算法最终可能会收敛到局部最优解上。下图就是当初始化结果不好时,算法最终迭代出的结果,这显然不是我们希望看到的。

2.2 用实验说明

  • 具体参数:

样本数:350

特征维度:4

簇数量:3

距离度量:欧式距离

  • 我们希望看到,当K-Means迭代收敛时,应该为全局最优。其效果应该如下图所示。

  • 但在实验中,第一次测试的结果就收敛到了一个效果不怎么好的局部最优,如下图所示。

2.3 如何解决随机结果不好的问题?

多随机几次,取最好的结果!

  • 多次随机初始化

2.4 实验中的一些其他细节

2.4.1 “距离”度量方式

距离实际上反映了不同样本之间的相似度

满足非负性、对称性、同一性、三角不等式性的度量,如欧氏距离、曼哈顿距离、切比雪夫距离等,都可以作为距离度量。

2.4.2 簇心数量K的选取

  • 肘部原则

尝试不同的k值,绘制均方误差曲线图,找到图像的肘部为宜


第三部分 平衡聚类

3.1 -balance聚类

下图中一共有12个样本点。我们希望将它们分成3个簇,并且保证分成的簇相对平衡。在这个例子中,这是一个绝对平衡的分簇,即每个簇内含有的样本点完全相同。

3.2 平衡聚类应用场景

  • 数据预处理

①  图像分类领域,使用词袋模型对图像进行分割,分割后需要使用K-Means对分割除的特征聚类。更平衡的聚类会得到更准确的图像分类结果。

②  当未标记的样本直觉上服从均匀分布时,平衡聚类可以更好的反应实际样本类别。

3.3 -balance方法一——在K-Means上改进

3.3.1 方法说明

  • 设定2个规则:
  1. 规定簇数量K(同K-Means)
  2. 规定簇最多包含多少个点
  • 对K-Means改进:
  1. 设定2个规则
  2. 在最终收敛前,每个簇心维持1个边界值,该边界值为簇心到簇中每个点距离的最大值
  3. 当一个簇已满,又有1个新样本想加入,进行一个判断。若簇心到该样本距离小于边界值,则踢出已在簇中的最远样本,接纳该样本
  4. 每次接纳新样本,都更新簇心位置

3.3.2 例子

下图为使用K-Means聚类过程中的中间状态。假设在样本点重新分簇的过程中,红色星星代表的样本需要被重新分配到绿色簇中,如下图所示:

假设我们允许每个簇最大包含5个样本。此时,绿色簇已经包含了5个样本,达到了上限。我们计算绿色簇心到红色星星的距离,拿去和绿色簇的边界值比较。在这个例子当中,绿色簇心到红色星星的距离,小于绿色簇的边界值。因此,我们将绿色簇中距离簇心最远的样本踢出簇,并将红色星星样本包含进来,如下图所示:

3.4 -balance方法二——阴阳K-Means加速重新分簇

3.4.1 阴阳K-Means

  • 全局过滤
  1. 对于每个样本点,维持上下两个边界。上边界大于等于样本到最优簇簇心的距离,下边界小于等于样本到次优簇簇心的距离
  2. 利用这两个边界,可以使样本在重新分配簇的步骤中,不需要和每个簇心计算距离
  • 组过滤/局部过滤
  1. 将K个簇按照簇心之间的距离远近分组
  2. 对于每个样本点,先判断属于哪个分组,再在这个组内计算上下两个边界

3.4.2 对于方法一的改进

在方法一中,-balance平衡聚类会在重新分簇步骤时,将样本点踢出簇,因此会比普通的K-Means有更多的重新分簇步骤。因此,在方法二中,平衡聚类的步骤思路和方法一相同,但使用阴阳K-Means的思想,加速了重新分簇的步骤,使得算法整体的效率提高。

阴阳K-Means具体使用方法,如下图所示:

【零基础系列】K-Means聚类算法相关推荐

  1. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

  2. k means聚类算法_K-Means 聚类算法 20210108

    说到聚类,应先理解聚类和分类的区别 聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来. K-Means 聚类算法有很多种 ...

  3. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  4. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  5. Thinking in SQL系列之五:数据挖掘K均值聚类算法与城市分级

    原创: 牛超   2017-02-21   Mail:10867910@qq.com 引言:前一篇文章开始不再介绍简单算法,而是转到数据挖掘之旅.感谢CSDN将我前一篇机器学习C4.5决策树算法的博文 ...

  6. k均值聚类算法python_K均值和其他聚类算法:Python快速入门

    k均值聚类算法python This post was originally published here 这篇文章最初发表在这里 Clustering is the grouping of obje ...

  7. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  8. K-Means(K均值聚类算法)

    K-Means(K均值聚类算法) 1.前言 要学习聚类算法就要知道聚类学习算法是什么,为什么要学习聚类学习聚类学习算法,有什么用途,下面就简单的做一下介绍,并且详细的说明k-means均值聚类学习算法 ...

  9. 机器学习实战-61:K均值聚类算法(K-Means)

    K均值聚类算法(K-Means) 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 机器学习分为监督学习.无监督学习和半监督学习(强化学习).无监督学习最常应用的场景是聚类(clust ...

最新文章

  1. A networkIntegration Approach for Drug-Target interaction Prediction and ComputationalDrug Repositio
  2. 【翻译】VisualStudio11中的CSS编辑器改进(asp.net 4.5系列)-ScottGu
  3. python练手程序_100个python练手小程序
  4. nio框架中的多个Selector结构
  5. 【ElasticSearch】Es 源码之 DiskThresholdMonitor 源码解读
  6. 递归查找所有子代id php,PHP递归函数:从父ID获取子ID
  7. perl脚本中的ENDOFINPUT
  8. android7.x版本编译framework.jar无效解决
  9. 入门Python,看这一篇就够了,史上最全的Python基础语法知识清单!
  10. 选择条件WD_SELECT_OPTIONS_20
  11. CrowdSec:行为检测引擎
  12. 更换卡巴斯基6授权许可文件的方法
  13. 70.(cesium篇)cesium接入天地图影像与注记(经纬度)
  14. 魔兽争霸无法在这个计算机,W7系统魔兽争霸3不能初始化DirectX怎么办
  15. 如何搭建FTP--文件传输协议
  16. 开源html5在线音乐网站,一个漂亮的开源HTML5音乐播放器——APlayer
  17. JPA配置不生成外键
  18. Python机器视觉--OpenCV入门--鼠标事件与TrackBar控件(含小项目:OpenCV调色板)
  19. enq: TX - allocate ITL entry
  20. android 代码中修改字体,引用dimen资源

热门文章

  1. 科技视界杂志科技视界杂志社科技视界编辑部2022年第18期目录
  2. 饿了么交易系统设计思路
  3. 低照度水下图像增强论文(L2UWE)+代码+评价方法
  4. RGB彩色空间的不同转换公式
  5. element-ui 输入框的前后缀图标 prefix-icon 和 suffix-icon
  6. 车载颚式移动破碎机让资源重生,刻不容缓
  7. preLaunchTask“C/C++:g++.exe生成活动文件“已终止,退出代码为-1
  8. 数字人民币应用日渐成熟,领先美欧至少5年
  9. 自动备份Linux上的博客数据到坚果云
  10. OpenMV的资料下载