? 高斯混合模型是一种概率模型,它假定实例是由多个参数未知的高斯分布的混合生成的。从单个高斯分布生成的所有实例都形成一个集群,通常看起来像一个椭圆。每个集群都可以由不同的椭圆形状,大小,密度和方向。高斯模型的均值代表集群的中心,方差代表方向
???? 这个模型假定一个数据集是从K个高斯分布的集合中产生,但是每个集合都有一个权重,代表产生一个实例到数据集的可能性或者贡献(我暂且这么理解,要知道更严格的说法可以取看原文),一个实例的位置x(i)服从某个高斯分布.
???? ? 高斯混合模型的目的就是找到这K个类的均值,协方差,还有权重。它和KMeans的算法差不多,也是找K个中心点,然后不断的进行迭代,所用的算法叫做EM最大算法,也就是期望最大化。只不过EM算法使用的是软集群分配,不是硬集权分类,他会估算出每个实例属于其他集群的概率值,使用所有数据进行更新,因为其中包含了概率值。
??? 高斯混合模型和KMean一样,受到初始化影响。而且也需要知道K值。
sklearn中有一个GaussianMixture类,也就是高斯混合类,它需要指定成分n_components,相当于k值,在训练之后,可以得到三个值,weight_,means_,covariances_,也就是权重,均值和协方差。
比如我们有一个数据集,是由三个高斯模型生成,然后混合在一起。
gus = GuessianMixture(n_components=3, n_init=10)
gus.fit(X)
就会把三类的数据分开,求出他们的均值,协方差,权重
然后如果你想要根据模型预测某个值属于某个类,可以使用predict或者predict_proba,前一个返回硬决策的值,后一个返回概率值,这个概率值是一个数组,长度为k,代表它属于每一个类的概率。
关于它的用法可以查看官方文档。
高斯混合模型是一个生成模型,当然也可以生成一些符合该模型的数据
gus.sample(100)
生成一百个数据
给定任意位置,可以计算该位置的密度,使用score_samples()实现,分数越高代表密度越高,只不过这个数值是取对数生成的,积分求指数就是面积。
异常检测,比如欺诈检查,异常值检测。
异常值的判断很简单,低密度的区域的任何实例都被看做异常。所有密度的阈值需要你自己去定义,比如某个产品的异常概率是百分之五,那么我们就可以根据实际经验设置低于这个值的密度,如果在后续发现这个值设定的不好,可以根据情况调整。
对于KMeans可以通过惯性系数和轮廓系数来选择距离的数,但是对于高斯混合模型就不同。
一般是使用贝叶斯信息准则BIC,赤池 信息准则AIC
BIC = log(m)p-2log(L)
AIC=2p-2log(L)
m代表实例数。
p是模型学习的参数数量
L是模型的似然函数的最大值
他们都对具有更多需要学习的参数的模型进行惩罚,并奖励非常拟合数据的模型。他们常常选择的模型相同,但是如果不同,BIC选择模型要更简单,但是AIC要更加拟合数据。
这里突然想起一个面试题,你怎么看待似然函数和概率的?差不多就是这么一个意思吧,就是求解一个模型的惩罚函数,用的方法。
这个东西必须好好谈一下。给定一些参数的统计模型,用概率一词描述未来的结果x的合理性,而用似然一词表示描述在知道结果x之后,一组特定的参数值的合理性。
也就是概率密度函数是x的函数,值被固定,而似然函数是的函数,x被固定。
看了这么久,你可能会问,这个有什么关系吗?
显然,如果是最大似然函数,你对函数积分,就是对x积分,得到的值一定是1
如果你对概率密度函数积分,对积分,你只会得到一个正数,不一定等于1。
如果你给一个数据集,你可能会使用最大似然估计来求解一个模型,然后使用最大似然估计求出=某个值。但是如果存在一个先验概率,就要考虑最大化这个先验概率的最大似然估计,这个求解方式被称为最大后验估计。由于后验概率会约束参数值,则这个后验概率可以看作最大似然估计的正则化版本。
可以调用bic和aic方法查看贝叶斯信息和赤化信息。
BeyesianGaussianMixture它比上文讲到的高斯混合模型更灵活,它只需要指定最大的n_components然后分类。比如有三个类,我们要求这个模型分出10个类,它就会让其他七个类的权值归零。前面说过,高斯混合模型有三个值需要学习,权重值,均值,协方差,这里也是的,所以不存在的类的权值就归零了。
??? 这个训练过程是用的贝叶斯定律求解,用到了KL散度等知识。总之,它是高斯混合模型的升级版。
(1).聚集聚类
它可以把多个类聚集起来、
(2).BIRCH
(3)均值聚类
(4).相似性传播
(5).谱聚类
4.异常值检测和新颖性检测
异常值检测和新颖性检测的区别在于,异常值检测的实例中含有异常值,而新颖性假设数据集没有异常。
使用的算法除了高斯混合模型,还要如下算法
(1).PCA
这是因为正常的实例重建与含有异常值的重建误差比较起来小得多。
(2).Fast-MCD(最小协方差决定)
它假定正常值是高斯分布,异常值不是高斯分布
(3).隔离森林
它构建一个随机森林,然后再每个节点上去掉一个特征,然后选择一个阈值来把数据集分为两个部分,数据集就慢慢分开了,最后所有的数据都分开了,但是异常值会距离其他值更远。而且,他们只需要更少的步骤被隔离开。
(4).局部离群因子(LOF)
它将给定实例周围的实例密度与其相邻的实例周围的密度进行比较,离群值通常比k个最近的邻居更加孤立。
(5).单例SVM
这个就需要给定一个纯洁的数据集,然后指分为一个类,那么最后分割平面就是原点和其他数据分开了。其实这个算法更加适合于新颖性检测。