A. KMeans
KMeans的损失函数,是假设每个簇符合方差相等的球星高斯分布,然后极大化似然概率,最小化负对数;
正因为各个簇的方差相同,所以预处理必须将数据各个维度归一化,否则方差最大的维度对聚类结果会有绝对影响。
以最小化损失函数L为目的:聚类中心不动,找每个样本最近的那个中心做他的类别,是为了最小化L; 所有样本的类别确定了,找最优的聚类中心,也是为了最小化L;
受初值和离群点影响大:初值,可以用KMeans++这样,后面的每个聚类中心都按离前面已定了的聚类中心的距离和,越大则选中概率越小;离群点:预处理过滤,或者用中位数做聚类中心(相当于把损失函数里的L2距离变成了L1距离);
易收敛到局部最优解(一般情况下,局部最优也够用了)
K(聚类个数)的选择:Elbow法,横轴是K,纵轴是聚类误差,误差下降变平缓那点,可选做K;
自动选K: 同样是K个类个样本,随机生成的N个样本聚类损失,减去真实的N个样本的聚类损失,得到的"K-损失delta"曲线,在最高点处的K,可选做K;
收敛性证明,和EM算法一个套路,先写出极大似然的式子,然后找它的下限函数,找到一个Q分布让原式子等于下限函数,然后最优化下限函数,依次迭代;
Q等于P时,下限函数等于原函数;KMeans上此时Q只有1个维度为1,其余为0;把Q带入下限函数式子,化简;
B. 高斯混合模型(GMM)
每个样本是由1个mixture生成的;
p(x|参数) = 所有类别z之和_{p(x,z|参数)} = 所有类别z之和_{p(x|z, 参数)*p(z|参数)}; 所谓mixutre的“权重”严格意义上是该mixture的先验概率p(z|参数)
计算E步时,Q(z|x,参数)=p(z|x,参数)=p(z,x|参数)/p(x,参数), 分母消掉,=p(z,x|参数)=p(x|z,参数)*p(z|参数),前项似然函数套用高斯函数即可,后项先验概率是模型参数;
EM算法可以得到样本属于每一类的概率是多少(可用于分类,gesture分类器项目用的就是这个!)
C. 评估
KMeans聚类:聚类为球形分布,适合误差平方和做评估;密度聚类:聚类不规则或球形缠绕,误差平方和会失效;
先确定K,再评估质量
轮廓系数:点p到自己cluster其他点的平均距离越小,越好;点p到其他cluster所有点平均距离里最小的一个cluster的平均距离越大,越好;
均方根标准偏差(RMSSTD): 所有样本到自己cluster中心的L2平方和,除以样本个数,除以维度数,开方;越小越好;
R方: 所有样本到自己cluster中心的误差平方和越小越好,把所有样本看成一个cluster时的误差平方和(也就是方差)越大越好;
人工构造不同种类的数据集,考察聚类算法的应对好坏:
1. 观察聚类误差是否随聚类类别数量的变化而单调变化;
2. 观察离群点对聚类结果的影响;
3. 观察近邻数据团会不会被分到不同的cluster里;
4. 观察大团和小团差异明显时,聚类效果;
5. 观察样本团里的样本数量具有较大差异时,聚类效果;