算法特点
GMM聚类与Keams聚类很相似。K-means是将每个数据点分配到某一个类别中,而GMM则是给出这些数据点被分配到每个类别的概率,又叫做soft assignment。其除了被用在clustering上,还经常被用于density estimation上。
得出一个概率有很多的好处,因为它的信息量比简单的一个结果要多。这个概率可以被看做是得出这个结果的把握。比如说,在诸如疾病诊断时,算法得出49%的概率患病,为51%的概率正常,如果仅仅用50%的阈值将患者诊断为“正常”的话,风险是非常大的,也就是说得出正常的结果的把握是非常小的。这个情况下,就会拒绝发表评论,而把这个任务留给有经验的医生去解决。
学习的过程可以看做是一种“归纳”的过程,在归纳的时候需要有一个提前假设,即“归纳偏置”。比如说线性回归,它的归纳偏执就是“数据是符合线性函数的,满足要求的函数必须是线性函数”。如果去掉“线性函数”这个归纳偏执,那么就会产生过拟合的问题,我们就可以构造n-1次多项式函数,让它完美的穿过所有的N的点,甚至可以构造出无数个满足条件的函数。然而,我们学习的目的通常不是解释现有的事物,而是从中归纳知识,并且能够应用到新的事物上。
没有归纳偏执或者归纳偏执太宽泛会导致过拟合,而限制过大的归纳偏执也是有问题的;比如说,如果数据不是非线性分布的,强行的使用非线性函数去做分类通常并不能够得到好的结果。难点就是在这之间找到一个平衡点。
混合高斯模型的归纳偏执很明显,就是假设数据符合混合高斯分布,也就是看作数据是从多个高斯分布中生成而来。混合模型其实是可以变的任意复杂的,通过增加模型的个数,我们可以任意的逼近任何连续的概率密度分布。
主程序:
clear;
clc;
%从实验结果可以看出先使用Keams方法计算初始点,再使用GMM进行聚类得到的结果
%明显优于直接使用GMM方法进行聚类得到的结果
%数据X1和X2的真实均值为[1,1;4,4;8,1]
%协方差矩阵均为[2,0;0,2];
%数据集X1的混合系数为[1/3,1/3,1/3]
%数据集X2的混合系数为[0.6,0.3,0.1]
[X1,X2]=generateData();
K=3;
%数据集X1
[a_init,mu_init,sigma_init]=initPara(X1);
[