【零基础系列】K-Means聚类算法
本文意图
- 结合目标函数,了解 k-means步骤和每一步的目的
- 如何避免陷入局部最优
- 如何使聚类出的簇更加平衡
目录
本文意图
第一部分 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个规则:
- 规定簇数量K(同K-Means)
- 规定簇最多包含多少个点
- 对K-Means改进:
- 设定2个规则
- 在最终收敛前,每个簇心维持1个边界值,该边界值为簇心到簇中每个点距离的最大值
- 当一个簇已满,又有1个新样本想加入,进行一个判断。若簇心到该样本距离小于边界值,则踢出已在簇中的最远样本,接纳该样本
- 每次接纳新样本,都更新簇心位置
3.3.2 例子
下图为使用K-Means聚类过程中的中间状态。假设在样本点重新分簇的过程中,红色星星代表的样本需要被重新分配到绿色簇中,如下图所示:
假设我们允许每个簇最大包含5个样本。此时,绿色簇已经包含了5个样本,达到了上限。我们计算绿色簇心到红色星星的距离,拿去和绿色簇的边界值比较。在这个例子当中,绿色簇心到红色星星的距离,小于绿色簇的边界值。因此,我们将绿色簇中距离簇心最远的样本踢出簇,并将红色星星样本包含进来,如下图所示:
3.4 -balance方法二——阴阳K-Means加速重新分簇
3.4.1 阴阳K-Means
- 全局过滤
- 对于每个样本点,维持上下两个边界。上边界大于等于样本到最优簇簇心的距离,下边界小于等于样本到次优簇簇心的距离
- 利用这两个边界,可以使样本在重新分配簇的步骤中,不需要和每个簇心计算距离
- 组过滤/局部过滤
- 将K个簇按照簇心之间的距离远近分组
- 对于每个样本点,先判断属于哪个分组,再在这个组内计算上下两个边界
3.4.2 对于方法一的改进
在方法一中,-balance平衡聚类会在重新分簇步骤时,将样本点踢出簇,因此会比普通的K-Means有更多的重新分簇步骤。因此,在方法二中,平衡聚类的步骤思路和方法一相同,但使用阴阳K-Means的思想,加速了重新分簇的步骤,使得算法整体的效率提高。
阴阳K-Means具体使用方法,如下图所示:
【零基础系列】K-Means聚类算法相关推荐
- k means聚类算法_一文读懂K-means聚类算法
1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...
- k means聚类算法_K-Means 聚类算法 20210108
说到聚类,应先理解聚类和分类的区别 聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来. K-Means 聚类算法有很多种 ...
- OpenCV官方文档 理解k - means聚类
理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...
- k均值聚类算法(K Means)及其实战案例
算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...
- Thinking in SQL系列之五:数据挖掘K均值聚类算法与城市分级
原创: 牛超 2017-02-21 Mail:10867910@qq.com 引言:前一篇文章开始不再介绍简单算法,而是转到数据挖掘之旅.感谢CSDN将我前一篇机器学习C4.5决策树算法的博文 ...
- k均值聚类算法python_K均值和其他聚类算法:Python快速入门
k均值聚类算法python This post was originally published here 这篇文章最初发表在这里 Clustering is the grouping of obje ...
- OpenCV的k - means聚类 -对图片进行颜色量化
OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...
- K-Means(K均值聚类算法)
K-Means(K均值聚类算法) 1.前言 要学习聚类算法就要知道聚类学习算法是什么,为什么要学习聚类学习聚类学习算法,有什么用途,下面就简单的做一下介绍,并且详细的说明k-means均值聚类学习算法 ...
- 机器学习实战-61:K均值聚类算法(K-Means)
K均值聚类算法(K-Means) 深度学习原理与实践(开源图书)-总目录,建议收藏,告别碎片阅读! 机器学习分为监督学习.无监督学习和半监督学习(强化学习).无监督学习最常应用的场景是聚类(clust ...
最新文章
- A networkIntegration Approach for Drug-Target interaction Prediction and ComputationalDrug Repositio
- 【翻译】VisualStudio11中的CSS编辑器改进(asp.net 4.5系列)-ScottGu
- python练手程序_100个python练手小程序
- nio框架中的多个Selector结构
- 【ElasticSearch】Es 源码之 DiskThresholdMonitor 源码解读
- 递归查找所有子代id php,PHP递归函数:从父ID获取子ID
- perl脚本中的ENDOFINPUT
- android7.x版本编译framework.jar无效解决
- 入门Python,看这一篇就够了,史上最全的Python基础语法知识清单!
- 选择条件WD_SELECT_OPTIONS_20
- CrowdSec:行为检测引擎
- 更换卡巴斯基6授权许可文件的方法
- 70.(cesium篇)cesium接入天地图影像与注记(经纬度)
- 魔兽争霸无法在这个计算机,W7系统魔兽争霸3不能初始化DirectX怎么办
- 如何搭建FTP--文件传输协议
- 开源html5在线音乐网站,一个漂亮的开源HTML5音乐播放器——APlayer
- JPA配置不生成外键
- Python机器视觉--OpenCV入门--鼠标事件与TrackBar控件(含小项目:OpenCV调色板)
- enq: TX - allocate ITL entry
- android 代码中修改字体,引用dimen资源
热门文章
- 科技视界杂志科技视界杂志社科技视界编辑部2022年第18期目录
- 饿了么交易系统设计思路
- 低照度水下图像增强论文(L2UWE)+代码+评价方法
- RGB彩色空间的不同转换公式
- element-ui 输入框的前后缀图标 prefix-icon 和 suffix-icon
- 车载颚式移动破碎机让资源重生,刻不容缓
- preLaunchTask“C/C++:g++.exe生成活动文件“已终止,退出代码为-1
- 数字人民币应用日渐成熟,领先美欧至少5年
- 自动备份Linux上的博客数据到坚果云
- OpenMV的资料下载