1 概述
K-Means相对比较简单,是一个无监督的聚类算法。
给定一堆无标签的数据,将他们聚为K类,K事先是不知道的,需要自己确定。
例如,你是一个互联网公司负责用户体验的产品经理,需要根据用户年龄、兴趣等,将用户划分为不同群体,对不同群体单独分析他们的需求。
假设这里是二维数据,即只根据用户年龄、兴趣聚类,将各个用户特征转化为一个二维空间上的点。首先指定一个K,即类别数量,然后进行以下操作:
1. 初始化中心点。在二维空间初始化K个中心点。
2. 更新中心点。衡量各个非中心点距离最近的中心点,将非中心点划到这个中心点所在的簇(中心点对非中心点说,你以后就是我的手下了,跟我干吧)。全部划分以后,每个簇的中心重新选择一个中心点(新中心点对旧中心点说,在我们这个簇里,我才是领导),完成中心点更新
3. 重复上述过程,直到没有更新。
这里的损失函数是所有点到簇中心的距离(由于无监督学习没有标签数据,所以不怎么强调损失函数,这里的损失函数有些特别,因为这里的“损失”计算不像监督学习那样确定性那么强)
2 距离的衡量
有各种各样的距离,例如欧式距离、马氏距离、余弦距离等
3 K值
K的确定有很多种方法,在吴恩达的Coursera里讲了一个肘部(elbow)规则,即不同的K对应不同的损失函数,K越大损失函数越小(可以想象如果K等于样本数,那么每个样本都是簇中心,损失函数为0),在这个递减的过程中,损失函数突然变缓的位置对应的K就是要选择的K。还有很多种确定K的算法。
4 初始化中心
初始化是随机的,会影响到最终的结果。可以使用GA等算法找到最佳参数。
参考资料
1. 吴恩达Coursera中机器学习课程
2. 百度百科