聚类方法之k-mean算法
来源:互联网 发布:乐高ev3编程视频教程 编辑:程序博客网 时间:2024/05/16 13:02
算法思想:
K-mean算法又称K均值算法,属于原型聚类中的一种基于距离度量的聚类算法。其思想是:
1.随机选取数据集中的k个初始点作为质心,遍历整个数据集,对于每个样本,将其归类到距离其最近的质心所对应的簇。
2.接着计算每个簇的均值,作为当前簇的质心,重新步骤1的操作,直至迭代结束或簇均值的调整幅度小于指定的阈值。
算法流程图如下:
按照西瓜书上的迭代过程,如下图所示:
从图中可看出,由于选取点的随机性,第一轮迭代后的效果并不理想,但经过多轮迭代簇质心的改变,聚类效果明显好了很多。
算法改进:
由于k值是用户预先设定的一个参数,存在着太多的随机性,将k值设定太低,则无法表现出样本之间的差异,但如果把k值设定太高,则会“夸大”样本间的差异性。那么,怎么评判k值的选择是否合理,或者说,如何来评价聚类的效果呢?
我们可以用误差平方和(SSE:sum of square error)来评价聚类的效果。
误差平方和表示的是簇中所有样本点到其质心距离平方和,误差平方和越小,表示数据点越接近于其质心,聚类效果也越好。
通过最小化误差平方和的评价思想,我们有两条思路来优化K-mean算法。
1.增加簇(k)的个数
2.先将数据集分为m个簇(m小于k),然后将m个簇中较大的簇分为几个小簇,直到簇值个数为k
显然,第一种方法有为我们的聚类目标,这里,主要讲述第二种方法中比较具有代表性的方法—二分K均值算法。
二分k均值算法的主要思想是:
1.设定聚类目标—簇的个数k
2.将所有点看成一个簇,此时簇的个数m=1
3.while m < k :
for 每一个簇 i:
计算总误差i.SSE1
在给定的簇上进行K均值聚类(k=2)
计算一分为二的簇的总误差i.SSE2
选择误差最小min(i.SSE2)的簇进行k均值聚类(k=2)
借用《机器学习实战》的效果图,二分K均值的效果图如下:
二分K均值算法总能产生较好的聚类结果。
总结:
优点:
简单易懂,容易实现
缺点:
1.k值的选择比较盲目,一般根据实际情况来选择
2.在大规模数据上算法收敛过慢,且可能收敛到局部最小而不是全局最小。
参考
周志华:《机器学习》
Peter Harrington (作者) 李锐 , 李鹏 , 曲亚东 , 王斌 (译):《机器学习实战》
- 聚类方法之k-mean算法
- 聚类算法之K-mean算法
- K-Mean聚类算法
- K-mean聚类算法
- K-均值聚类算法(K-mean)
- 聚类问题-k-mean算法
- k-mean聚类算法实现
- K-Mean聚类算法+C语言代码
- K-mean(多维度)聚类算法(matlab代码)
- k-mean算法实现
- K-mean clustering 算法
- Mean Shift 聚类算法
- 基本k-mean聚类的文本聚类算法原理和例子
- 数据挖掘之K-Mean
- K-mean算法的优点缺点
- k-mean算法的java实现
- 几种计算机视觉中常用的聚类算法(K-means, Agglomerative clustering, Mean shift, Spectral clustering)
- K-mean聚类的一个代码的详细注释
- python网络爬虫与信息采取之解析网页(二)---BeautifulSoup库的find()和find_all()
- 递归简论
- JAVA深入研究——Method的Invoke方法。
- poj 2065 SETI(高斯消元)
- 循环队列
- 聚类方法之k-mean算法
- hpuoj【1410】QAQ & 火星情报局【数学】
- Django编写中间件实现url自定义过滤
- 面向对象思想-封装拖拽对象
- PHP与Shell交互
- 前端入门方法
- curl详细用法
- 《numpy学习指南》学习笔记——常用函数
- 数据库优化