机器学习: K-means 聚类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shinian1987/article/details/80554028

今天介绍机器学习里常见的一种无监督聚类算法,K-means。我们先来考虑在一个高维空间的一组数据集, S = { x 1 , x 2 , . . . , x N } x R D ,假设我们需要把这组数据聚集长 K 类,不失一般性,我们可以假设每个聚好的类都有一个中心 μ k ,如果聚类完成的话,那么数据集中的每一个点 x 会有一个中心 μ k 离这个点的距离最近。可以构造一个变量 r n k = { 0 , 1 } 表示变量 x 离第 k 类最近 r n k = 1 ,离其他的类更远 r n j = 0 , j k ,那么我们可以定义如下的目标函数:

J = n = 1 N k = 1 K r n k | | x n μ k | | 2

这个目标函数就是要求 r n k , μ k ,使得目标函数 J 的值最小。

为了解决上面这个问题,因为要同时求 r n k , μ k 两个变量,所以我们会采取分步迭代的方法,当我们求 r n k 可以让 μ k 固定不动,当我们求 μ k 的时候,可以让 r n k 固定不动。

很显然,当我们求 r n k ,只有比较每一个 x n μ k 的距离,选择距离最近的一个类即可:

r n k = 1 if = arg m i n j | | x n μ j | | 2

而求 μ k 的时候,我们可以 让 r n k 固定不动, 对目标函数 J 求导,

2 n = 1 N r n k ( x n μ k ) = 0

从而我们可以求得 μ k :

μ k = n r n k x n n r n k

通过这样的反复迭代,直到所有的 r n k , μ k 都不再变化。

猜你喜欢

转载自blog.csdn.net/shinian1987/article/details/80554028