K均值算法是一种聚类算法(聚类算法就是将一堆没有标签的数据自动化分为几类,并保证同类数据有相似特征)
K均值算法的一个重要假设:数据之间的相似度由欧氏距离衡量,如果不能,那就需要将数据转化为可以用欧氏距离衡量。
“牧师-村民”模型:
有四个牧师去郊区布道,一开始牧师们随意选了四个布道点,并且把这几个布道点的情况公告给了郊区所有的居民,于是每个居民到离自己家最近的布道点去听课。听课之后,一些人觉得距离太远了,于是每个牧师统计了一下自己的课上所有的居民的地址,搬到了所有地址的中心地带,并且在海报上更新了自己的布道点的位置。牧师每一次移动不可能离所有人都更近,有的人发现A牧师移动以后自己还不如去B牧师处听课更近,于是每个居民又去了离自己最近的布道点……就这样,牧师每个礼拜更新自己的位置,居民根据自己的情况选择布道点,最终稳定了下来。
实际计算过程:
1.对于空间中的一堆点,随机生成K个聚类中心点,然后分别计算每一个数到这些中心点的距离,每个点都选取距离自己最近的中心点作为自己的类别;
2.依据已经归类好的同一个类别的点,重新计算中心点,确保一个类别内部的点和中心的的距离之和最小;
3.将这K个中心点作为新的中心点,重复步骤一和步骤二,直到收敛结束。
注意:
1.输入数据一般需要缩放(如标准化)。主要是因为距离的计算可能出现“过高的影响”情况发生;
2.输入数据的变量类型不同,需作特别处理。可以改变类型,但容易出现问题;也可将不同类型变量分开处理,在将结果合起来;
3.输出结果不固定。算法具有随机性,初始化到收敛往往不同。
4.高维数据有效性较弱。高维距离的意义有所变化;
5.运行效率与性能需要进行取舍;