聚类算法(三)--K-means方法
来源:互联网 发布:mac 测量图片尺寸工具 编辑:程序博客网 时间:2024/06/06 03:20
本文主要K-means聚类算法的原理、优缺点及其改进,以及如何用R语言实现K-means聚类算法。
一、概述
K-means是一种较为经典的划分聚类算法,由于该算法的效率高,所以在对大规模数据进行聚类时被广泛应用。
1.算法原理
k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。k-means算法的处理过程如下:首先,随机地选择k个对象,每个对象初始地代表了一个簇的平均值或中心;对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;然后重新计算每个簇的平均值。这个过程不断重复,直到准则函数收敛。通常,采用平方误差准则,其定义如下:
这里
2.算法步骤
(1)任意选择k个对象作为初始的簇中心;
(2)计算每个样本点与各个簇中心的距离,根据距离最近法则确定样本点的簇标记;
(3)重新计算每个簇的质心;
(4)重复(2)、(3),直至簇不发生变化或者达到最大迭代次数。
用一张图可以很清楚的看出K-means方法的整个过程,这里k=2。
二、优缺点及其改进
1.优点
- 算法快速、简单,且准确率较高;
- 对大数据集有较高的效率并且是可伸缩性的;
2.缺点
- K是事先给定的,这个K值的选定非常难以估计;
- 聚类结果不能保证是全局最优解,也即容易陷入局部最优解,且聚类结果与初始点的选择关系较大,这样就会导致聚类结果容易不稳定
- 离群值可能有较大干扰;
- 不能处理非球形的簇,不能处理不同尺寸、不同密度的簇。
3.如何克服缺点
克服缺点一:
- 使用层次聚类法对初始样本进行聚类,选取适当的K。
- 观测样本的散点图:对于二维和三维的样本,可以通过观测数据散点图来确定类的个数。
克服缺点二:
- 选取多组不同的初始点多跑遍k-means,然后取其中使得平方误差最小的结果。这种策略简单,但是效果可能不好,这取决于数据集和寻找的簇的个数。
- 取所有点的质心作为第一个点,然后对于每个后继初始质心,选择离已经选取过的初始质心最远的点。使用这种方法,确保了选择的初始质心不仅是随机的,而且是散开的。但是,这种方法可能选中离群点。
- 在层次聚类的基础上提取K个簇,并用这些簇的质心作为初始质心。该方法通常很有效,但仅对下列情况有效:样本相对较小;K相对于样本大小较小。
克服缺点三:
- 先行剔除离群值,然后再进行聚类。
克服缺点四:
- 换用其他的聚类算法(如基于密度方法)。
三、实例
#读取数据集newiris <- iris[,-5]#建模iriskmeans <- kmeans(newiris, centers = 3)#可视化聚类结果,用不同的颜色代表不同的聚类结果,不同的形状代表训练数据集的原始分类情况,并画出各类的中心点plot(newiris[c("Sepal.Length", "Sepal.Width")], col = iriskmeans$cluster, pch = as.integer(iris$Species)) points(iriskmeans$centers[,c("Sepal.Length", "Sepal.Width")], col = 1:3, pch = 8, cex=2)#将聚类结果与源数据集进行比较table(iriskmeans$cluster, iris$Species)
参考资料:
【1】四种聚类方法之比较
【2】K-means聚类算法
【3】R语言实现聚类分析
【4】使用R完成Kmeans聚类
阅读全文
0 0
- 聚类算法(三)--K-means方法
- 划分方法聚类(三) Canopy+K-MEANS 算法解析
- 划分方法聚类(一) K-MEANS算法
- K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比
- 【机器学习实战之三】:C++实现K-均值(K-Means)聚类算法
- K-means聚类算法(JerryLead)
- 聚类算法(1) ---- K-Means
- 聚类算法----之----(k-means)
- 聚类算法(一):k-均值 (k-means)算法
- k-means聚类算法
- k-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-means聚类算法
- K-MEANS聚类算法
- selenium各类等待处理方法
- 动态规划--(最长上升子序列 poj2533)
- Hibernate一级缓存-快照机制
- POJ 1151 -Invitation Cards- SPFA
- 小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐
- 聚类算法(三)--K-means方法
- 使用 Fetch
- BigDecimal和Currency的使用,用于金额的计算
- 自顶向下,逐步求精
- 贪心算法,递归算法,动态规划算法比较与总结
- 【Mapreduce】从代码上解决Output directory already exists错误,避免每次调试都要手动删除输出文件夹
- Java day 18-19
- x-requested-with 请求头 区分ajax请求还是普通请求
- 3、HTML5文档基本结构