K-means聚类算法及其各种变形模型的实验分析
欢迎关注“程序杂货铺”公众号,里面有精彩内容,欢迎大家收看^_^
1.K-Means算法原理
K-Means算法的基本思想:
将N个对象划分到k个簇中,分类结果要使得相似度较高的对象划分到同一类簇中,而差异较大的对象存在于不同类簇中。给定大小为n的数据集,设V={,,…,},令I=1,将n个对象划分到K个不同的簇中。
K-Means算法聚类的具体算法步骤为:
步骤1 在数据集中随机选取K个对象作为初始聚类中心 c1,c2,……,ck;
步骤2 计算数据集中每个对象到聚类中心的距离,选取最小距离min|V- |,分配到聚类中,其中V={v1,v2,…,vn},j=1,2……k;
步骤3 计算每个聚类中的所有对象均值,将此均值作为新的聚类中心,cj = (1/nj)*sum(xi),nj为第j类中对象的个数,j=1,2,……k;
步骤4 如果每个簇的聚类中心不再发生变化,聚类准则函数=收敛,则算法结束。否则返回步骤2继续迭代。
2.优缺点
K-Means算法实现起来比较简单、运算速度较快,算法效率较高,能够处理大型数据集,空间复杂度和时间复杂度较低。但同时K-Means算法也有不足之处,包含以下几点:
(1) 聚类结果不确定
K-Means算法初始聚类中心是随机选择的,初始中心点的选择不同会导致最终聚类的效果不同。选取不同的初始聚类中心,会使得最终聚类得到的类簇发生变化。除此之外,K-Means算法一般采用准则函数为目标函数,准则函数中只存在一个全局最小值和N个极小值,这使得在进行计算时,使得算法陷入局部最小的情况,导致最终得到的不是全局最优解。
(2) 聚类个数不确定
K-Means算法中K表示聚类后簇的个数,K的取值决定着聚类的结果。K值的选取需要根据实际的需要来确定,但是通常情况下我们是不知道将原始数据集分为多少个类簇是合适的,所以需要针对不同的实验通过对比选取恰当的K值。
(3) 数据量大、算法时间复杂度较高
K-Means算法的计算过程是一个不断迭代的过程,为了寻找到合适的聚类中心,需要不断的计算和调整才能对数据对象进行有效的分类。这个过程中反复进行大量的对象间距离的计算,所以K-Means聚类算法过程会消耗大量的时间,降低聚类的效率。
3.改进点1:(融合k中心点算法)
普通kmeans算法是求出的聚簇之后对簇内的点取平均值,若这个簇形成的图像比较狭窄或其图像并不均匀,则使用平均值生成的点就极有可能偏离聚簇本身,所以本文希望通过求生成的簇的重心,以保证生成的中心点不会偏离聚簇本身并能够更好的代表整个簇。
4.改进点2:(高斯随机初始化)
普通kmeans算法在初始化K个中心点时使用数据集前K个点作为中心点或使用默认的随机化方法初始化中心点,本文采用高斯随机化方法从数据集中取K个点作为中心点。
5.改进点3:(融合最小生成树)
由于kmeans选取的聚类中心是随机的,这使得算法容易陷入局部最优,若从不同的初始聚类中心出发,会得到不同的聚类结果。若使用Kruskal 最小生成树算法形成合理的初始聚类中心,再进行k-means 聚类的迭代步骤,从而能够进行有效的聚类。
最小生成树k-means 算法:
首先根据Kruskal 算法求此图的最小生成树( MST) ,然后按权值从小到大逐个删除最小生成树中的k - 1 条边,得到k 个互不相通的连通子图,接着分别计算出这k 个连通子图中所有对象的平均值,将其作为初始聚类中心,最后釆用原始的k-means算法做聚类分析。
算法具体步骤:
步骤1:
在有权重连通图中,首先根据最小生成树算法,如Kruskal算法,求出图的最小生成树,并将边值按照从小到大的顺序排列,此时的最小生成树包含了n 个结点和n - 1 条边。
步骤2:
然后按照边的权值由小到大排列形成数据集E = { x1,x2,x3,…,xn},对于距离最近的2 个数据点xi、xj,计算它们之间的中心点dij =Mid( xi,xj) 。
步骤3:
将dij替换xi、xj放入余下数据集中形成E = { x1,x2,…,dij,…,xn},重复步骤2,直到集合E中剩余k个结点为止。集合E中的元素即为初始聚类中心Centerj(I) ,j = 1,2,…,k,I 为循环次数。
步骤4:
计算每个数据对象与聚类中心的距离D( xi,Centerj() ) ,如果满足D( xi,Centerj(I) ) = min{ D( xj,Centerj( I) ) } ,则xi∈Ck。
步骤5:
重新计算k 个新的聚类中心Centerj(I+ 1) = (1/nj)*Σnji = 1xji,j = 1,2,…,k。
步骤6:
判断Centerj( I + 1)≠Centerj( I) ,j = 1,2,…,k 是否成立,若成立,则I = I +1,返回步骤3;否则算法结束。
6.实验结果:
原始K-means算法求中心点(使用平均值) |
加入重心的K-means算法(即改进点1) |
|
初始化使用默认取数据集中前K个点信息 |
53.47% |
72.47% |
初始化使用默认的随机化方法 |
70.225% |
71.9% |
初始化使用高斯随机化方法(即改进点2) |
70.225% |
73.03% |
注:程序地址见https://github.com/Emmitte/K_Means
或http://download.csdn.net/detail/u013473512/9683206
其中:initCenterPointByFirstK(OriginalDatameans[])方法:
初始化使用默认取数据集中前K个点信息
initCenterPointByDefaultRandom(OriginalDatameans[])方法:
初始化使用默认的随机化方法
initCenterPointByGaussianRandom(OriginalDatameans[])方法:
初始化使用高斯随机化方法(即改进点2)
initCenterPointByMTK(OriginalDatameans[])方法:
使用Kruskal的最小生成时方法生成初始中心点
getMeans_ByAvg(ArrayList<OriginalData>cluster,ArrayList<Double> dist, Map<Double, Integer> loc)方法:
原始K-means算法求中心点(使用平均值)
getMeans_ByCore(ArrayList<OriginalData>cluster,ArrayList<Double> dist, Map<Double, Integer> loc)方法:
加入重心的K-means算法(即改进点1)
欢迎关注“程序杂货铺”公众号,里面有精彩内容,欢迎大家收看^_^
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表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...
- OpenCV的k - means聚类 -对图片进行颜色量化
OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...
- K-Means(K均值聚类算法)
K-Means(K均值聚类算法) 1.前言 要学习聚类算法就要知道聚类学习算法是什么,为什么要学习聚类学习聚类学习算法,有什么用途,下面就简单的做一下介绍,并且详细的说明k-means均值聚类学习算法 ...
- k均值聚类算法python_K均值和其他聚类算法:Python快速入门
k均值聚类算法python This post was originally published here 这篇文章最初发表在这里 Clustering is the grouping of obje ...
- 【模式识别】K均值聚类算法应用实验报告及MATLAB仿真
一. 实验目的 1.掌握K均值聚类算法的原理和实现过程: 2.掌握K均值聚类算法的应用方法. 二. 实验内容 1.彩色图像分割 选择一幅图像,分别按三种颜色数进行彩色图像分割的结果(原图和分割图).步 ...
- k均值聚类算法优缺点_Grasshopper实现K均值聚类算法
本文很长很长,有很多很多图,包含以下部分: 1.算法简介 2.如何分类平面点 3.如何分类空间点 4.如何分类多维数据 5.后记 提醒:以下内容包括:智障操作,无中生友,重复造轮子 等 1.算法简介 ...
最新文章
- CTO(首席技术官)
- 【转载】linux环境变量PS1的简介
- java的类属性默认有this 但容易与参数重名 所以需要显性的加上this 以分区别
- python write报错a byte-like object is required.not str
- 程序员总结的:最没有学习效率的 5 种方法!你在用其中哪一种?
- HTML5 css链接添加不同的样式
- Spark Shuffle详解剖析
- 如何使用Movavi Video Editor Plus在Mac上制作旁白配音视频
- csdn官网(csdn官网免费下载)
- T60 Fan Error 解决办法.转自ZOL产品论坛-作者zxymb
- python元组元素的提取_Python 元组
- MacOs Catalina “无法打开,因为无法验证开发者”
- 店铺定位目的,品牌传播,产品、人群、价格定位
- 如何生成EI检索报告
- 幂律分布 计算机科学,Numpy 发现幂律分布
- visualVM 介绍 (一)
- Python Web简介
- python 学习分享之简单的播放音乐1(playsound)
- 【面试复盘】腾讯IEG天美j3工作室
- PMP考试报名有什么硬性要求?你达标了吗?