一、引言
从这篇文章开始,介绍非监督学习算法。前面介绍的算法,都是有监督学习算法。
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也就同时收敛。