概述

聚类算法是在无监督的情况下将对象自动分组的一种分析方法,典型的聚类算法分为三个阶段:特征选择和特征提取,数据对象间相似度计算,根据相似度将数据对象分组。聚类算法的目标是将数据集合分成若干簇,使得同一簇内的数据点相似度尽可能大,而不同簇间的数据点相似度尽可能小。可分为层次聚类算法和划分聚类算法。
常见的聚类算法有k-means,STING,CLIQUE等。本文所记录的K-means算法是由J.B.MacQueen在1967年提出的,也有一种说法是该算法由Steinhaus1955年、Lloyd1957年、Ball&Hall1965年、McQueen1967年分别在各自领域独自提出的。是数据挖掘中的一种重要的分析方法,是无监督学习算法,属于一种划分聚类算法,广泛应用于机器学习等领域,十大经典数据挖掘算法之一。

优点

运算简单、效果好、容易实现,适于处理大规模数据,可伸缩性强,时间复杂度接近线性。

缺点

算法中聚类数目K值难以确定,初始聚类中心如何选取,离群点的检测与取出,距离和相似性度量等,对噪声数据和离群点数据较为敏感,对于大数据量算法的开销较大。

应用

广泛应用于文档聚类、市场细分、图像分割、特征学习等。

原理

MacQueen的思想为:给定n个数据点{x1,x2,xn},找到K个聚类中心{a1,a2,ak},使得每个数据点与它最近的聚类中心得距离平方和最小,并将这个距离平方和称之为目标函数,为Wn=∑i=1nmin⁡1≤j≤k∣xi−aj∣2W_n=\sum_{i=1}^{n}{\min_{1\le j\le k}{|x_i-a_j|}^2}Wn​=∑i=1n​min1≤j≤k​∣xi​−aj​∣2 ,后来随着研究的深入,该算法诸多问题便显露出来,主要有需要预先确定K值,会受到初始聚类中心影响,难以处理分类属性数据以及容易收敛于局部最优解等。用欧式距离(Wn)作为衡量数据对象间相似度的标准,相似度与数据对象间的距离成反比,相似度越大,距离越小。
算法步骤:
输入:K(簇的数目),D(包含n个对象的数据集)。
输出:K个簇的集合。
步骤:

  1. 从D中任意选取K个对象作为初始簇中心;
  2. repeat,循环步骤3-5;
  3. 根据簇中对象的均值,将每个对象指派到最相似的簇;
  4. 更新簇均值,即计算每个蔟中对象的均值,xiˉ=∑x∈Dix/∣Di∣\bar{x_i}=\sum_{x\in D_i}{x/|D_i|}xi​ˉ​=∑x∈Di​​x/∣Di​∣ 此处Di为簇内数据集合;
  5. until目标函数不再发生变化,即Wn=∑i=1k∑x∈Di∣x−xiˉ∣2W_n=\sum_{i=1}^{k}\sum_{x\in D_i}{|x-\bar{x_i}|}^2Wn​=∑i=1k​∑x∈Di​​∣x−xi​ˉ​∣2 不再发生明显变化。
    步骤5返回步骤3循环执行,当目标函数不再发生变化时算法结束。

    该图片截取自引文[2]

发展方向:
提升K-means算法处理海量或多维数据集的能力。如何将算法更好地用于处理指数级数据的聚类,也是需要研究的方向。
降低K-means算法的时间复杂度。如何能更好更快地提升聚类能力,需要做更进一步的优化。

优化

算法优化主要从以下几个方面进行,几十年来改进方法层出不群,本文只挑几个比较典型容易理解的改进方法作为特例。
聚类收敛条件: 针对于会陷入局部最优解,1995年Chinrungrueng等人提出了改进算法,在原有的算法中加入了两种新的机制分别为:允许算法在自适应过程中摆脱目标函数Wn的干扰;采用反馈方式,根据当前聚类质量动态的调整算法的收敛速度。后来学界中采用类内紧密型和类间分散性的比值来作为收敛函数,这样当收敛函数收敛到极小值时,类内紧密型和类间分散性都可以达到较优值。
K值的选取: 研究发现K值的选取在[2,N][2,\sqrt N][2,N​] ,N为数据空间中所有数据点的个数。解决方案有基于聚类有效函数的解决方法、基于遗传算法的解决方法、以及其他解决方案。最有代表性的选取方法是令K逐渐增加,直到K=N,在此过程中目标函数Wn回单调减少,而当K增加到一定数值时减少速度会减慢,直到K=N时为零 ,此时意味着各点自成一组。由此递减曲线出现的拐点可作为最优的K值。

该图片截取自引文[7]

初始聚类中心的选择: 在算法中,初始聚类中心是随机选取的,因此可能造成在同一类别的样本被强行当做两个类的初始聚类中心,使聚类结果最终只能收敛于局部最优解,因此算法的聚类效果很大程度上依赖于初始聚类中心的选择。针对该问题学界就基于密度、基于优化算法的解决方案以及其他解决方案。
处理分类属性数据: 传统的算法只适用于处理数值属性的数据,而对于分类属性和混合属性数据集则不太适用。基于此Huang提出了适用于纯分类属性数据集的K-modes算法和适用于混合属性数据集的K-prototypes算法。后来,Chaturvedi等提出面向分类数据集的K-modes-CGC算法。蒋盛益等人认为K-modes算法采用modes来表示累的对应“中心”,难以反映类中对象的取值情况,会导致距离计算不够准确,从而影响聚类质量,基于此提出了k-summary算法。
离群点去除: 传统去除方法主要是通过计算欧氏距离,去除离其他点距离之和最远的λ\lambdaλ%(人为设定)个点。还有一种基于密度的离群点的检测算法就是首先根据LOF算法计算每一个数据对象的离群因子,离群因子越大说明该数据对象偏离中心的程度越大,越有可能是离群点。选出最小的前a*n(a由人为设定)个数据对象作为候选聚类中心样本,再使用最大最小法选出K个初始聚类中心,进行K-means迭代输出聚类结果。最大最小法即为选取所有数据点到聚类中心的欧式距离的最小值,然后在这些最小值中选取最大值作为聚类中心点。
其他方面改进: 最近几年出现了遗传算法、粒子群算法、萤火虫算法、蚁群算法等与传统的K-means算法相结合的改进算法,这几类算法的共同点是具有一定的全局优化能力,理论上可以在一定时间内找到最优解或近似最优解。

算法

算法代码python和matlab均可实现,笔者没有代码基础也不会写,只能参考其他博主代码。

参考文献

[1] 董文静. K-means算法综述 [J]. 信息与电脑(理论版), 2021, 33(11): 76-8.
[2] 杨俊闯, 赵超. K-Means聚类算法研究综述 [J]. 计算机工程与应用, 2019, 55(23): 7-14+63.
[3] 丛思安, 王星星. K-means算法研究综述 [J]. 电子技术与软件工程, 2018, (17): 155-6.
[4] 吴进宝. K-means算法研究综述 [J]. 电子技术与软件工程, 2014, (18): 207.
[5] 李卫军. K-means聚类算法的研究综述 [J]. 现代计算机(专业版), 2014, (23): 31-2+6.
[6] 周爱武, 陈宝楼, 王琰. K-Means算法的研究与改进 [J]. 计算机技术与发展, 2012, 22(10): 101-4.
[7] 王千, 王成, 冯振元, et al. K-means聚类算法研究综述 [J]. 电子设计工程, 2012, 20(07): 21-4.
[8] 吴夙慧, 成颖, 郑彦宁, et al. K-means算法研究综述 [J]. 现代图书情报技术, 2011, (05): 28-35.

(学习笔记)十大经典算法——K-means聚类算法相关推荐

  1. 数据结构与算法笔记 —— 十大经典排序及算法的稳定性

    一.十大经典排序算法 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全 ...

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

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

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

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

  4. matlab实现k-l算法,K均值聚类算法的MATLAB实现

    K-means算法是最简单的一种聚类算法.算法的目的是使各个样本与所在类均值的误差平方和达到最小(这也是评价K-means算法最后聚类效果的评价标准) K-means聚类算法的一般步骤: 初始化.输入 ...

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

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

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

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

  7. 数据挖掘十大经典算法笔记

    主要总结一下数据挖掘十大经典算法,包括各自优缺点, 适用数据场景,做个小笔记,分享一下 数据挖掘主要分为分类算法,聚类算法和关联规则三大类,这三类基本上涵盖了目前商业市场对算法的所有需求.而这三类里又 ...

  8. 极客算法训练笔记(六),十大经典排序之希尔排序,快速排序

    目录 抛砖引玉 希尔排序 快速排序 抛砖引玉 十大经典排序算法江山图 十大经典排序算法江山图 排序算法的衡量指标我这里不再重复,上一篇我已经列举分析的很清楚了,但是非常重要,没看到我上一篇的小伙伴墙裂 ...

  9. DataMining学习2_数据挖掘十大经典算法

     数据挖掘十大经典算法  一. C4.5  C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3 算法.   C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进: ...

最新文章

  1. 昨天在公司加班,上午好像就是弄一个ftp的linux服务问题
  2. Docker常用操作命令
  3. 数据库中的实体、元组、字段、属性、码、分量、依赖关系、完全部份传递依赖、范式等你了解吗?【笔记自用】
  4. 从Java面试官的角度,如何快速判断程序员的能力
  5. AWR 报告深度解读:Time Model Statistics 信息的计算和获取
  6. 为什么有人说开车时,最能看出一个人的情商和潜力?
  7. ZenHub Epics创造了GitHub中敏捷Epics
  8. GraphX的三大图算法
  9. Windows 7,无法访问internet,DNS无响应
  10. python的__slots__
  11. python:for循环从list列表的第二个元素开始遍历
  12. Nginx与tomcat组合的简单使用
  13. python期权价格计算器_使用Python构建内在价值计算器
  14. 快速傅里叶变换(蝶形算法)
  15. 数字游戏(数位dp)
  16. windows10开启与关闭休眠模式
  17. 左宗棠:大清朝最后一棵顶梁柱
  18. linux电子相册,基于Linux电子相册的.doc
  19. 安装打印机显示域服务器不可用,Win7系统打印出错提示“Active Directory域服务当前不可用”怎么解决...
  20. easyExcel导入导出(列锁定单元格、表头合并、导出类型限制、锁定单元格增加底色、设置密码、隐藏列等)

热门文章

  1. 小程序开发:用原生还是选框架(wepy/mpvue/uni-app/taro)?
  2. 优思学院|PDCA、A3、DMAIC、8D 有什么区别?
  3. 计算机基础-查看与电脑相连设备的IP地址
  4. java计算机毕业设计考研经网站系统MyBatis+系统+LW文档+源码+调试部署
  5. 渗透测试以及安全面试的经验之谈-技术篇
  6. 全球与中国汽车稳压器市场深度研究分析报告
  7. DLAP221 USB口电源控制
  8. IBM SPSS Statistics的生存分析寿命表如何使用
  9. 一台机器就能帮助夫妻怀孕? AI比医生更善于预测胚胎良好度
  10. JavaScript系列—性能优化之《网站性能优化实战——从12.67s到1.06s的故事》