聚类算法是无监督学习,因为它不需要结果.
其实聚类并不是特别准,因为它没有标准答案,就表示有很多种可能,那么实际机器判断的准确度可能就并不高了.
聚类主要有:K-means聚类, 层次聚类,混合高斯模型
有监督学习下的答案y,对应于聚类里面的相关性
聚类的好坏分析:
类内相似度高,类间相似度低,类内距离近,类间距离远,相关系数一般相关系数越低相关度越高
一般来说距离就用欧式距离,相关系数就用person相关系数
K-means
输入1:N个样本点
输入2:拟定的聚类个数
初始化N维的样本,随机生成k个聚类中心,然后开始循环迭代,往各个中心收敛,边收敛别计算新的中心点
面试点:迭代到什么情况能算收敛,或者说迭代收敛怎么定义
答1.聚类中心不需要重新计算,2.每个样本点到中心的距离和,不会有太大变化
聚类会遇到收敛到局部最低点的问题,解决方式
1.找到一个距离中心点最远距离的新点1,找到和它们两个点距离最远的新点2...
2.重新选初始点,然后多尝试几次,然后选择到聚类中心之后最小的
3.k-means++
聚类数目k的选择方式
肘点法
画出k取值和损失函数对应的图,根据图找到拐角最大的点,那个点就叫肘点,那个值就是k的最佳值
那个图类似于这样
比如图中的明显就是取2最合适
工业经验:实际选取可以根据分类的样本数目,比如数目太大的时候没法循环个几十万次来选,就先选个相对合适的值,进行分类,如果里面的值都差不多,那就不用管了,如果有些聚类特别小,可以适当的降一点,具体的合适多少,具体降多少都要根据实际情况来
k-means的不足
1.'硬聚类',一个样本就必须是一个类的,不能是其它类.哪怕它可以属于其它类
2.异常值处理不佳,要一个值离样本聚类很远,可能把中心点拉到一个鸟不拉屎的地方去比如
这种情况可以找均值最近的样本点替代均值
3.团状聚类无法支持,只能用其它聚类方法替代
层次聚类
层次聚类分为bottom - top和top-bottom
先从bottom-top说吧
假如我们有10个样本,把里面最近的样本22取出来进行聚类,得到五个聚类,然后重复这操作,如果遇到奇数就不进行聚类,判断和其它聚类的距离,再添加到相应聚类里面去.
这样分配出来的聚类,不会像k-means一样出现聚类特别少的情况,但每个时间节点需要遍历的次数都是恐怖的
top-bottom
和bottom-topx相反一开始就是拆,把距离相对比较远的,一步步拆掉
缺点:计算量比较恐怖
优点:精准度很高,因为每个值它都能考虑到,比较适合做基因工程之类的
高斯混合模型GMM+EM
就是多个正态分布嫁接在一起形成的一种分布形式
因为是聚类所以有k个正态分布,也就是k个聚类P(C=i) = w1样本点C在第i个高斯分布的概率w1
P(x|C=i) = u(x;u,σ)
而实际的P(x) = w1 * u(x;u,σ)
求解模式为E-Step和M-Step
E-step
首先用上述公式把概率Pij求解出来,
然后用i把所有j遍历一遍
E-step就是用已知的样本估出样本的分布
M-Step
在知道样本分布的情况下拟合出正态分布的均值和方差,得到一个完整的正态分布
w1 = Ni/N,N为总体数目,Ni为样本数目,w1是落入该样本的概率
ui = 1/Ni sum(x) 把样本所有值相加然后除以样本数量Ni就得到样本均值ui
方差就是样本的每个值减去均值的平方相加然后除以样本个数
然后得到的最优解并不是分类,而是每个点的概率,可以凭分析去判断落在哪个聚类
解决有些值的权重不一样导致硬聚类并不十分正确
EM算法比较快,所以比较高效
三个聚类的比对图,Hierarchical代表层次聚类,k-means不用说,GMM是高斯混合模型一般和EM算法一起用GMM+EM
1.效率来说层次聚类慢的要死,每步操作都是数量惊人的迭代,k-means一般来说是最快,高斯混合模型其次前提是两者的k值一样
2.后两者需要k值,第一个是二叉树形式的,所以不需要k值
3.第一个以执行者生成的聚类为主,后两个则根据k来