图解数据挖掘K-means算法
K-means Clustering Algorithm 中文名也许叫“K均值聚类算法”,是统计学和数据挖掘领域中常用的一种算法。维基百科上是这样介绍的:k-means clustering is a method of cluster analysis which aims to partition n observations into k clusters in which each observation belongs to the cluster with the nearest mean(将n个观察值分成k个类,使得每一类中的观察值与该类的均值最接近,与其他的类的均值较远)。
先来看一个最简单、最直观的图示。
上图有很多点,现在想将他们分成3个cluster,怎么办? 作为人,一眼就看出来了,但是计算机就没那么容易分类了,我们必须借助一些算法,而k-means就是其中的一种。K-means不仅可以处理二维空间的聚类,还可以扩展到n维向量空间,还可以处理字符、图像、声音等等。
以上图为例,K-means算法的基本步骤如下:
输入:一个要处理的数据集(例如上图的点集),分成cluster的个数(比如3个),一个mean的计算方法(比如两点之间的距离函数,)
Step1. 首先随机的给每个点标上一种颜色,并计算同种颜色点坐标的算术平均值,表示出相 应的均值点。
Step2. 根据目前算出的均值点,将所有的点集分成3类,为每一类中的每个点,标上与离它最近的均值点相同的颜色。怎么分呢?这里要介绍一种“泰森多边形法”,英文名叫“Voronoi diagram”(见文章***维基百科链接)。于是就有了下面这张图。
Step3.重复step2,直到所有点的颜色不再变化为止。
算法结束,输出如下结果。
上面的例子在简单的二维空间里,如果放在三维空间那么mean的计算方法就要修改了。事实上在处理多维空间、字符、图像等问题时,不同的问题有不同的计算公式,这时mean的意思可能就不是“均值”了,也许用“相似度”和“相异度”来衡量个体之间的关系会更好,详见参考文章一。
按照惯例,下面应该贴上我自己写的k-means算法代码了,不过很遗憾的是我现在还在摸索用python的numpy库和matplotlib库画图的方法,在参考文章二中有一个python语言的代码。
***要感谢一下数据挖掘老师 Devert Alexandre,因为本文的图片都是从他的slides里截出来的。^_^
参考文章一
参考文章二
维基百科k-means链接
泰森多边形法维基百科链接(Voronoi diagram)
原文链接:http://blog.nlogn.cn/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98-k-means-%E7%AE%97%E6%B3%95/
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击