聚类与应用
谱聚类
rbf kernel
原型聚类:Kmeans、GMM高斯混合模型【独立的cluster】
有些聚类算法是可以看作树状的重叠,不用输入k
kmeans的损失函数是每个类到中心点的平方误差和,且损失函数的最小化是一个NP问题
容易陷入局部最小。
那么陷入局部最小怎么办呢?
————kmeans对初始化中心敏感
改进:kmeans++
————缓解方法:
1. 初始第一个聚类中心为某个样本点,初始化第二个中心离第一个点最远,初始化第三个中心离前两个最远....
2. 多初始化几遍,选所有这些据类中损失函数(到聚类中心的平方和最小)
3. 优化的初始化聚类方法kmeans++
————关于k的选择
1. 很经典的“肘点法”--把损失函数在不同的k下的画出来
2. 选取不同的k值,画出损失函数曲线
3. 选取“肘点值”
图像聚合
kmeans不同k下的聚合关于k的选定,比如80w商品,期望每个类有100个商品。直接聚合的话跑起来会非常的慢。这时会通过商品的一些文本信息,比如下装、牛仔裤、长裤,短裤等先做一个分类。可能聚合成200个类,然后再对这200个类并行跑。
还有一种情况比如说聚类成2000个类,再对每个类进行遍历,有些类里包含的样本个数非常少,这样的类是可以不分出来的,也能减少分类的个数。
kmeans先进行切分,逐层去用比较好。
kmeans和kmeans++的区别:
1. 初始化。kmeans随机初始化,kmeans++每次初始最远的点
-------kmeans的局限性
1. 属于“硬聚类”,每个样本只能有一个类别。其他的一些聚类方法(GMM或者模糊kmeans允许软聚类)
2. kmeans对于异常点的“免疫力”很差,我们可以通过一些调整(比如中心不直接取均值,而是找均值最近的样本点代替)
3. 对于团状的数据点集区分度好,对于带状(环绕)等“非凸”形状不太好。(用谱聚类或者特征映射)
带状聚类 对于密度不同的效果也不太好-------层次聚类
层次聚类----Kmeans VS 层次聚类
1. Kmeans这种扁平聚类产出一个聚类结果(都是独立的)
2. 层次聚类可以根据聚类程度不同,有不同的结果
3. Kmeans需要指定聚类的个数k,层次聚类不用
4. 通常来说Kmeans比层次聚类快
5. Kmeans用的多,可以用K-median
----高斯混合模型!其实我到现在不怎么懂
GMM的优势?
1. 可理解性好
看作多个分布的组合
2. 速度快
因为使用EM这种高效算法,时间复杂度O(tkn)
3. 学术上比较直观
最大数据似然概率
4. 可以拓展到其他分布的混合
多个多项式分布做类别判定
劣势:
1. 初始化要慎重,不然可能掉到局部最优里去
2. 需要手工指定K(高斯分布)的个数
3. 对于非凸的分布数据集也无能为力
总结:怎么做的
1. 根据当前的参数指定概率分布
2. 根据概率分布重新估计参数