目录
K-Means算法是一种迭代求解的聚类分析算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。并且K均值算法可以用于分类不明显的簇
1、算法步骤
其实简单而言,K均值算法就是在做两件事1)簇分类 ; 2)移动聚类中心。
首先,需要输入K簇的个数和训练集的样本。
然后,进行一个迭代。
①将样本选择好归为哪一个簇(根据样本离哪一个样本中心的距离最近);
②移动聚类中心(取平均值)。
迭代直至中心点不再变化为止。
2、优化目标
K-均值最小化问题是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此K-均值的代价函数(又称畸变函数)为 :
我们的优化目标是要找出使得代价函数最小的 和
3、如何初始化聚类中心
首先需要满足
,通常我们采用随机选择K个训练样本。
但是有时候不幸的是,我们随机选取的聚类中心比较近,形成了几个不满意的簇类。这时候我们应该怎么办呢?我们为了避免这种局部最优,我们会尝试多次初始化,会随机选择聚类中心50-1000次,也就是运行50-1000次的K-Means算法。
局部最优指的是代价函数(畸变函数)J 的局部最优。为了避免这个问题,我们可以尝试多次随机初始化,初始化K-均值算法很多次,并运行K-均值算法很多次,以此来保证我们最后能得到一个足够好的结果,一个尽可能好的局部或全局最优值。如下图一个局部最优的情况:
4、如何选择K值
对于如何选择K值,我们并没有一个很好的答案。我们一般采用手动选择聚类数据(观察可视化图、输出项)来选择。
①肘部法则
随着簇类个数的增加,如图,我们可以很明显的看到畸变函数有一个跟人手肘一样的一个拐点。这种情况是比较理想的,这时我们可以愉快的选择这个K=3这个点。
当然,多数情况这个肘点就可能比较模糊,不能够直接的看出来,所以,肘部法则不是每次都有效果的。
②考虑K=Means算法聚类的目的是什么?然后再想聚类数目K取哪一个值能更好的服务于后续的目的。