今天介绍机器学习里常见的一种无监督聚类算法,K-means。我们先来考虑在一个高维空间的一组数据集,, ,假设我们需要把这组数据聚集长 类,不失一般性,我们可以假设每个聚好的类都有一个中心 ,如果聚类完成的话,那么数据集中的每一个点 会有一个中心 离这个点的距离最近。可以构造一个变量 表示变量 离第 类最近 ,离其他的类更远 ,那么我们可以定义如下的目标函数:
这个目标函数就是要求 ,使得目标函数 的值最小。
为了解决上面这个问题,因为要同时求 两个变量,所以我们会采取分步迭代的方法,当我们求 可以让 固定不动,当我们求 的时候,可以让 固定不动。
很显然,当我们求 ,只有比较每一个 与 的距离,选择距离最近的一个类即可:
而求 的时候,我们可以 让 固定不动, 对目标函数 求导,
从而我们可以求得 :
通过这样的反复迭代,直到所有的 都不再变化。