1、引言

什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习。监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入、特征、自变量)与标签(又称输出、目标、因变量)之间关系的学习方式。监督学习模型又可以分为两类,分类和回归。

分类模型:目标变量是离散的分类型变量;回归模型:目标变量是连续性数值型变量。无监督学习:只有数据,无标签,即训练集没有标注目标变量。常见的无监督学习算法有聚类,由计算机自己找出规律,把有相似属性的样本放在一组,每个小组也称为簇。

简单来说,聚类是指根据相似数据点的属性或特征将它们分组在一起。

例如,如果我们有一组人的收入和支出,我们可以将他们分为以下几类:

  • 高收入,高消费
  • 高收入,低消费
  • 低收入,低消费
  • 低收入,高消费

2、K-means聚类

聚类算法有很多,最流行的聚类算法之一是 k-means。让我们了解 k-means 算法是如何工作的,以及该算法可能达不到预期的情况。

K-means有一个很著名很清晰的解析,就是牧师-村民模型。

有四个牧师去郊区布道,一开始牧师们随意选了几个布道点,并且把这几个布道点的情况公告给了郊区所有的居民,于是每个居民到离自己家最近的布道点去听课。听课之后,大家觉得距离太远了,于是每个牧师统计了一下自己的课上所有的居民的地址,搬到了所有地址的中心地带,并且在海报上更新了自己的布道点的位置。牧师每一次移动不可能离所有人都更近,有的人发现A牧师移动以后自己还不如去B牧师处听课更近,于是每个居民又去了离自己最近的布道点……就这样,牧师每个礼拜更新自己的位置,居民根据自己的情况选择布道点,最终稳定了下来。

根据上面这个故事,我们可以简单来概括一下K-means算法的一般步骤,K-Means聚类步骤是一个循环迭代的算法,非常简单易懂:

Step1:确定类别数量K,K值人为设定,在训练数据分布范围内,随机选择K个点作为初始中心点;Step2:按照距离最小原则,把所有数据点分到距离最近的中心点所在的类中;step3:每类中有若干个观数据点,计算K个类中所有数据点的均值,作为下一次迭代的中心点;Step4:重复step2、step3步,直到收敛(每个数据点所属类别或中心点不再改变),聚类过程结束。

下面我们通过一组图来直观了解一下K-means算法迭代过程:

初始状态

随机生成了3个聚类中心点,然后分别计算每一个数据点对这些中心的距离,把距离最短的那个当成自己的类别。这样每个点都会对应一个中心点,可以看到聚类的并不准确,红色聚类中心太偏,没有数据点属于该类,在代码中,我们会再次随机更新这个聚类中心。

第一次迭代

经过一次迭代之后,聚类中心向该类别的数据点的中心移动。

收敛状态收敛状态,聚类中心移动到每个类别数据点中心,继续迭代中心点位置也不在变化。

3、思考

(1)初始中心点怎么确定?

如果我们用欧式距离评估数据点与聚类中心的距离,那么在k-means算法步骤中,相当于我们一直在寻求一种最优的分割方式,使得总平方误差(SSE)最小,即数据点与其聚类中心的欧式距离最小。

在迭代过程中,从两个方面来降低SSE:

第一,把样本点分到最近邻的簇中,这样会降低SSE的值;

第二,用均值更新聚类中心,进一步的减小了SSE(以MSE为目标函数,求导可知最优解即为平均数,以MAE为目标函数,求导可知最优解为中位数,因此如果采用曼哈顿距离进行聚类,更新聚类中心时,我们就需要采用中位数而不是平均数更新)。

这样的重复迭代、不断优化,会找到局部最优解(局部最小的SSE),如果想要找到全局最优解需要找到合理的初始聚类中心。

那合理的初始中心怎么选?方法有很多,譬如先随便选个点作为第1个初始中心C1,接下来计算所有样本点与C1的距离,距离最大的被选为下一个中心C2,直到选完K个中心。这个算法叫做K-Means++,可以理解为 K-Means的改进版,它可以能有效地解决初始中心的选取问题,但无法解决离群点问题。

总的来说,最好解决办法还是多尝试几次,即多设置几个不同的初始点,从中选最优,也就是具有最小SSE值的那组作为最终聚类。

(2)K值怎么确定?

如果K过大,样本划分就越细,每个簇的聚合程度就越高,误差平方和SSE自然就越小。所以不能单纯像选择初始点那样,用不同的K来做尝试,选择SSE最小的聚类结果对应的K值,毫无疑问,SSE最小时必然对应K的最大值。

假设在我们的原始数据中,其客观存在的类别数量为M,当K值小于M时,随着K值的增大,SSE会快速下降,而当K值大于M时,随着K值增大,SSE下降幅度会减小。如下图所示,M取值事先未知,K=2开始尝试,发现K=3时,SSE大幅下降,K=4时,SSE下降幅度稍微小了点,K=5时,下降幅度迅速降低,再后面就越来越平缓。所以我们认为M取值应该为4,因此可以将K设定为4。

这种方法叫做“手肘法”,因为SSE和K的关系图就像是手肘的形状,而肘部对应的K值就被认为是数据的真实聚类数。

4、总结

k-means 聚类概念听起来不错,它易于理解,相对容易实现,并且可以应用于很多用例中。最重要的一点是,算法复杂度不高,仅仅为O(s*n),s为迭代次数,而一般情况下,k-means算法收敛速度很快,迭代次数不超过10次,因此在数据集较大时,k-means应用起来非常方便。

但也有一些缺点和局限性需要我们注意。从上文的算例来看,k-means 算法似乎运行得很好,但是,如果你仔细观察,你会发现所有创建的簇都是圆形的。这是因为聚类中心是使用平均值迭代更新的。

现在,考虑下面的例子,其中点的分布不是圆形的。如果我们对这些数据使用 k-means 聚类,你认为会发生什么?它仍然试图以循环方式对数据点进行分组。那不太好!k-means 无法识别正确的分类:

因此,我们需要一种不同的方法来将数据点分配给聚类中心。因此,我们不应该再使用基于距离的模型,而是应该使用基于分布的模型。

下一篇文章,我们再来看,高斯混合模型(GMM)是如何来克服K-means算法的缺点。

欢迎大家关注微信公众号“数学建模andMATLAB”继续交流哦~

k均值聚类算法考试例题_一文读懂K-means聚类算法相关推荐

  1. gps导航原理与应用_一文读懂角速度传感器(陀螺仪)的应用场景

    前文我们大致了解陀螺仪的来历,原理和种类,那么,它与我们的日常生活有怎样的关系呢? 陀螺仪器最早是用于航海导航,但随着科学技术的发展,它在航空和航天事业中也得到广泛的应用.陀螺仪器不仅可以作为指示仪表 ...

  2. mysql 默认事务隔离级别_一文读懂MySQL的事务隔离级别及MVCC机制

    回顾前文: <一文学会MySQL的explain工具> <一文读懂MySQL的索引结构及查询优化> (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论 ...

  3. stata 求输出相关系数矩阵命令_一文读懂结果输出命令大全(上)

    目录 描述统计量 help tabstat   //Stata 官方命令 描述统计量组间均值差异检验 help ttest help ttable2 help estout 相关分析命令 help p ...

  4. psm倾向得分匹配法举例_一文读懂倾向得分匹配法(PSM)举例及stata实现(一)

    原标题:一文读懂倾向得分匹配法(PSM)举例及stata实现(一) 一.倾向匹配得分应用之培训对工资的效应 政策背景:国家支持工作示范项目( National Supported Work,NSW ) ...

  5. 原创 | 一文读懂K均值(K-Means)聚类算法

    作者:王佳鑫审校:陈之炎本文约5800字,建议阅读10+分钟本文为你介绍经典的K-Means聚类算法. 概述 众所周知,机器学习算法可分为监督学习(Supervised learning)和无监督学习 ...

  6. 一文读懂K均值(K-Means)聚类算法

    作者:王佳鑫 审校:陈之炎 本文约5800字,建议阅读10+分钟本文为你介绍经典的K-Means聚类算法. 概述 众所周知,机器学习算法可分为监督学习(Supervised learning)和无监督 ...

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

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

  8. fcbf特征选择步骤_一文读懂 聚类特征选择

    <Feature Selection for Clustering:A Review> 0.1 introduction介绍 高通量技术导致数据维度以及样本数量呈指数增长,使得对数据集进行 ...

  9. 【机器学习】一文读懂异常检测 LOF 算法(Python代码)

    本篇介绍一个经典的异常检测算法:局部离群因子(Local Outlier Factor),简称LOF算法. 背景 Local Outlier Factor(LOF)是基于密度的经典算法(Breunin ...

最新文章

  1. 通过修改注册表提升SSD性能(Intel 5系列芯片组)
  2. 2015 Multi-University Training Contest 1 - 1002 Assignment
  3. 遍历Collection,避免在循环中删除对象时避免ConcurrentModificationException
  4. 框架:初识Mybatis
  5. sqlserver2005表转到mysql数据库
  6. Linux / openwrt / 安装 Web GUI 和 ftp server
  7. android SQLite数据库的使用
  8. 我是机器人布里茨_9.19机器人钩子范围增加,这些位置阴人无敌,一Q一个小朋友...
  9. 还有多少人不会用K8s?.NET高级高薪岗,开始要求了!
  10. 计算机毕业设计中用python神经网络编程实现手写数字识别
  11. 利用RazorSQL如何创建SSH密钥
  12. django从入门到放弃之001.初探
  13. Shell 通过sed替换文件字符串
  14. 开源分布式定时任务框架技术选型
  15. python程序设计与案例教程王小银_《Python程序设计与案例教程》王小银著【摘要 书评 在线阅读】-苏宁易购图书...
  16. eclipes代码提示及防空格自动补全
  17. 如何解决 使用matplotlib.finance获取雅虎财经网站股票数据 报错?
  18. 根据epc和ra定位linux kernel panic位置
  19. 爬虫python书籍-python爬虫有哪些书
  20. BBS论坛系统的需求

热门文章

  1. Ubuntu安装Anaconda
  2. 阿里云大数据计算服务MaxCompute(下篇)
  3. Angular - - $sce 和 $sceDelegate
  4. 图像处理之噪声---椒盐,白噪声,高斯噪声三种不同噪声的区别
  5. Unix_Linux系统定时器的应用(案例)
  6. 转:ASP.NET状态保存方法
  7. 让织梦内容页arclist标签的当前文章标题加亮显示
  8. 中国联通备战5G MWC发布《Edge-Cloud平台架构及产业生态白皮书》
  9. 18.SSM整合_搭建开发环境
  10. The Minimum Cycle Mean in a Digraph 《有向图中的最小平均权值回路》 Karp