K-means 聚类算法

一、引言

从这篇文章开始,介绍非监督学习算法。前面介绍的算法,都是有监督学习算法。

1.1 有监督学习

一句话总结:前面所学习的算法,都是在已知样例x的类别标签y,用不同的方法,估计模型中的参数。

线性回归,用最小二乘法,估计模型中的参数 θ
逻辑回归,用最大似然,估计模型中的参数θ
SVM,用SMO算法,估计模型中的参数 α

有监督 学习,就是给了你类别标签 y 以后 ,让你学习到,估计到最好的参数,这个参数**返回来能够尽可能的正确判别标签 y **。

1.2 无监督学习

上面解释的听明白了,给y,估计参数,回来判断y。

那么,如果没有给y呢?但是我还要分类,就属于无监督学习了

EM思想:

  • 1、 没有y,可以假设先给你个y0,你不就有了吗。
  • 2 、有了y0,就可以估计参数了。于是在有y的情况下,学到了顶好的参数θ0
  • 3、 上面的参数肯定不是模型最好的参数,不过因为已经有了稍微好点的参数θ0,我们可以再估计一下y的期望值y1,此时一定比y0要好了吧。
  • 4、 有了 比较好的类别标签y1,我可以再学到更好的参数θ1了。
  • 5、循环3、4两步,直到J收敛(后面会讲)。

二、K-means聚类算法

2.1、 聚类问题

在聚类问题中,给我们的训练样例是:

共有m个训练样例,每个样例是一个n维向量。此时,没有 类别标签y向量

2.2、K-means聚类算法

K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:

K是我们事先给定的聚类数,c(i)代表样例x(i)与k个类中距离最近的那个类,c(i)的值是1到k中的一个,质心uj代表我们对属于同一个类的样本中心点的猜测。

对应到上面的EM思想就是:

  • 1、随机选取类别标签 y (就是质心)。
  • 2、重复下面过程直到收敛 {
    ................根据 y,估计参数(这里的参数,就是样例x(i)应该属于的类)}
    ................已经得到参数,再估计y(已经知道每个 样例对应类别了,重新计算质心)
    }

上面对每一个类,重新计算质心的方法(对属于这一类的所有样例的坐标求平均)。

下图展示了对n个样本点进行K-means聚类的效果,这里k取2。

还有一个问题,怎么保证收敛?

我们定义畸变函数(distortion function)如下:

J函数表示每个样本点到其质心的距离平方和。
K-means是要将J调整到最小。

一开始,E步,随机选取了质心u,估计参数(样例x属于的类),此时u是固定的,参数估计的越好,则x被分的类越准,那么每个类中样例与质心的坐标平方差就会越小。

然后,M步,参数已经固定(每个样例x属于的类),估计类别标签u,u越准确,那么每个类中样例与质心的坐标平方差就会越小。

上面两个过程假体循环,都会使J减小,当J减到最小时,u和c也就同时收敛。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容