简 介:下面是我在学习时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。
关键词:高斯混合聚类、机器学习、极大似然估计
在讲高斯混合聚类算法之前先补充以下相关的数学知识,由于篇幅原因,只是简单叙述,如需详细内容,请查阅相关资料
一、正态分布
在概率论中我们学过某些数值在一定情况下是符合正态分布的。
我们经常见到某某数据符合正态分布,那么它到底是什么意思呢?
正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。
若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
正态分布是许多统计方法的理论基础。检验、方差分析、相关和回归分析等多种统计方法均要求分析的指标服从正态分布。许多统计方法虽然不要求分析指标服从正态分布,但相应的统计量在大样本时近似正态分布,因而大样本时这些统计推断方法也是以正态分布为理论基础的。
为什么很多假设都是使用正态分布呢?为什么不适用像泊松分布、指数分布这些分布呢?
- 根据中心极限定律,如果我们的样本足够多的情况下,我们的数据是符合正态分布的
- 正态分布是属于一种正态分布,具有良好的数学性质,便于建模
1.一元正态分布
一元正态分布的概率密度为:
f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}f(x)=2πσ1e−2σ2(x−μ)2
我们记作 N ( μ , σ 2 ) N(\mu,\sigma^2)N(μ,σ2) ,其中 μ \muμ 为数据的均值,而 σ 2 \sigma^2σ2 为样本的方差,f(x)为概率密度,进行积分后值为1。
2.二元正态分布
二元正态分布的概率密度为:
f ( x 1 , x 2 ) = 1 2 π σ 1 σ 2 1 − ρ 2 e − 1 2 ( 1 − ρ 2 ) 2 { ( x 1 − μ 1 ) 2 σ 1 2 − 2 ρ ( x 1 − μ 1 ) ( x 2 − μ 2 ) σ 1 σ 2 + ( x 2 − μ 2 ) 2 σ 2 2 } f(x_1,x_2)=\frac{1}{2\pi\sigma_1\sigma_2\sqrt{1-\rho^2}}e^{\frac{-1}{2(1-\rho^2)^2}\{\frac{(x_1-\mu_1)^2}{\sigma_1^2}-2\rho\frac{(x_1-\mu_1)(x_2-\mu_2)}{\sigma_1\sigma_2}+\frac{(x_2-\mu_2)^2}{\sigma_2^2}\}}f(x1,x2)=2πσ1σ21−ρ21e2(1−ρ2)2−1{σ12(x1−μ1)2−2ρσ1σ2(x1−μ1)(x2−μ2)+σ22(x2−μ2)2}
常记作 N ( μ 1 , μ 2 , σ 1 2 , σ 2 2 , ρ ) N(\mu_1,\mu_2,\sigma_1^2,\sigma_2^2,\rho)N(μ1,μ2,σ12,σ22,ρ) ,分别对应着两个随机变量的均值和方差,以及两个随机变量之间的相关系数。
3.多元正态分布
多元正态分布的概率密度为:
f ( X ) = 1 ( 2 π ) n 2 ∣ ∑ ∣ 1 2 e − 1 2 ( X − μ ) T ∑ − 1 ( X − μ ) f(X)=\frac{1}{(2\pi)^{\frac{n}{2}}|\sum|^{\frac{1}{2}}}e^{-\frac{1}{2}(X-\mu)^T\sum^-1(X-\mu)}f(X)=(2π)2n∣∑∣211e−21(X−μ)T∑−1(X−μ)
上面式子中的 μ \muμ 为n维均值向量,形状为 (n,1),∑ \sum∑ 为随机变量X的协方差矩阵。
该式子为一元正态分布的推广公式,涉及到多维变量,用矩阵进行表示。
4.概率密度函数
我们发现上面的三个式子中存在两种变量,一种是数据X,另外一种就是参数 μ \muμ 和 σ \sigmaσ ,也就是分布的参数。对于概率来说,我们是已知模型分布和参数,然后带入数据去求概率,而概率统计是已知分布,但是不知道分布符合的参数,然后基于样本数据X去估计分布的参数,使用的方法就是极大似然估计。
5.极大似然估计
什么是极大似然估计?
上面我们说有些情况,我们只是知道数据符合的分布,但是不知道具体符合的参数为多少,就是我们只知道某某数据符合正态分布,但是正态分布的均值和方差我们是不知道的,所以要根据已有样本进行估计,其实就是将所有样本数据带入概率密度公式,会获得每个数据的概率,然后将各概率相乘,最终优化就是使该式子达到最大,为什么是最大?因为我们的数据符合该分布,也就是要我们的样本数据大概率的出现在该分布中,然后求出使概率乘积最大的参数。
二、高斯混合聚类
说了这么久,终于到了我们的主题,就是我们的高斯混合聚类。
它是一种基于概率分布的聚类算法,它是首先假设每个簇符合不同的高斯分布,也就是多元正态分布,说白了就是每个簇内的数据会符合一定的数据分布。
它的大致流程就是首先假设k个高斯分布,然后判断每个样本符合各个分布的概率,将该样本划为概率最大的那个分布簇内,然后一轮后,进行更新我们的高斯分布参数,就会用到我们的极大似然估计,然后再基于新的分布去计算符合各个分布的概率,不断迭代更新,直至模型收敛达到局部最优解,常见的算法就是EM算法,它会同时估计出每个样本所属的簇类别以及每个簇的概率分布的参数。
概率密度常记为:
f ( X ) = p ( x ∣ μ i , ∑ ) f(X)=p(x|\mu_i,\sum)f(X)=p(x∣μi,∑)
意思就是在参数为一定值的情况下符合的分布,对应相应的概率密度函数。
有了上述的铺垫之后,我们就可以定义聚类需要的高斯混合分布函数:
p ( X ) = ∑ i = 1 k α i p ( X ∣ μ i , ∑ i ) p(X)=\sum_{i=1}^k\alpha_ip(X|\mu_i,\sum_i)p(X)=i=1∑kαip(X∣μi,i∑)
其中 α \alphaα 就代表我们选择每个簇的概率,那么它的和肯定是等于1的,∑ i = 1 k α i = 1 \sum_{i=1}^k\alpha_i=1∑i=1kαi=1 。
我们现在想计算对于某一个数据符合哪个簇的概率,如果对应哪个簇的概率大,那么该数据就划分为该簇内,也就对应条件概率 p ( Z ∣ x ) p(Z|x)p(Z∣x) ,意思就是在x的前提,符合哪个分布的概率。
我们引入几个变量,z i z_izi代表我们选择某个分布的随机变量,那么取值肯定是1-k之间,很显然它是对应我们上面的 α \alphaα 的,也就是 p ( z i = i ) = α i p(z_i=i)=\alpha_ip(zi=i)=αi,所以我们最终的条件概率公式为:
p ( z j = i ∣ x j ) = P ( z j = i ) p ( x j ∣ z j = i ) p ( x j ) = α i p ( x j ∣ μ i , ∑ ) ∑ l = 1 k α l p ( x j ∣ μ l , ∑ ) p(z_j=i|x_j)=\frac{P(z_j=i)p(x_j|z_j=i)}{p(x_j)} =\frac{\alpha_ip(x_j|\mu_i,\sum)}{\sum_{l=1}^k\alpha_lp(x_j|\mu_l,\sum)}p(zj=i∣xj)=p(xj)P(zj=i)p(xj∣zj=i)=∑l=1kαlp(xj∣μl,∑)αip(xj∣μi,∑)
该公式的意思就是我们的某一样本符合某一分布的概率,记为 γ j i \gamma_{ji}γji ,意思是数据 j jj 符合分布 i ii 的概率,所以我们就是要求:
λ j = a r g m a x i ∈ { 1 , 2 , . . . k } γ j i \lambda_j=argmax_{i\in \{1,2,...k\}}\gamma_{ji}λj=argmaxi∈{1,2,...k}γji
我们会求出数据 j jj 符合每个分布的概率,然后获得之中最大的概率,那么数据 j jj 就会被划分到与之对应的簇。
但是问题来了,在求该概率时,公式分子和分母都存在某一分布的概率密度,我们只是知道符合高斯分布,但是具体的参数是不知道的,那么怎么获得概率密度函数呢?
上面说到了,采用极大似然的方式,就是我们的样本数据出现在对应分布的概率乘积达到最大,所以我们就要进行最大化似然:
L L ( D ) = l n ( ∏ j = 1 m p ( x j ) ) = ∑ j = 1 m l n ( ∑ i = 1 k α i p ( x j ∣ u i , ∑ ) ) LL(D)=ln(\prod_{j=1}^mp(x_j))=\sum_{j=1}^mln(\sum_{i=1}^k\alpha_ip(x_j|u_i,\sum))LL(D)=ln(j=1∏mp(xj))=j=1∑mln(i=1∑kαip(xj∣ui,∑))
对上述函数进行求导,然后另导数为0,分别求出对应的 μ \muμ ,和 ∑ \sum∑。
然后求得:
μ i = ∑ j = 1 m γ j i x j ∑ j = 1 m γ j i \mu_i=\frac{\sum_{j=1}^m\gamma_{ji}x_j}{\sum_{j=1}^m\gamma_{ji}}μi=∑j=1mγji∑j=1mγjixj
∑ i = ∑ j = 1 m γ j i ( x j − μ i ) ( x j − μ i ) T ∑ j = 1 m γ j i \sum_i=\frac{\sum_{j=1}^m\gamma_{ji}(x_j-\mu_i)(x_j-\mu_i)^T}{\sum_{j=1}^m\gamma_{ji}}i∑=∑j=1mγji∑j=1mγji(xj−μi)(xj−μi)T
但是在求对应高斯混合系数 α \alphaα 时,会有约束条件,就是 a i ≥ 0 , ∑ i = 1 k α i = 1 a_i\geq0,\sum_{i=1}^k\alpha_i=1ai≥0,∑i=1kαi=1 ,所以我们需要对原方程添加个拉格朗日乘子。
拉格朗日乘法得基本形态就是:
对于函数 z = f ( x , y ) z=f(x,y)z=f(x,y) ,在满足 ψ ( x , y ) = 0 \psi(x,y)=0ψ(x,y)=0 时得条件极值,可以转化为:
f ( x , y ) + λ ψ ( x , y ) f(x,y)+\lambda\psi(x,y)f(x,y)+λψ(x,y)
就是在原有的方程后面添加约束条件。
对与我们的问题就是要解方程:
L L ( D ) + λ ( ∑ i = 1 k α i − 1 ) LL(D)+\lambda(\sum_{i=1}^k\alpha_i-1)LL(D)+λ(i=1∑kαi−1)
解得:
α i = 1 m ∑ j = 1 m γ j i \alpha_i=\frac{1}{m}\sum_{j=1}^m\gamma_{ji}αi=m1j=1∑mγji
三、详细算法流程
下面的图是我从西瓜书中摘出来的,公式看起来有点多,下面我用简单的语言将整个流程叙述一下。
- 首先在算法开始前需要确立簇的个数k,这也就对应着k个不同的高斯分布
- 初始化每个簇的高斯分布参数,μ , ∑ , α \mu,\sum,\alphaμ,∑,α,用于构建高斯混合概率密度,由于是开始还没有数据,肯定是要随机给值的
- 遍历所有的样本数据,计算每个样本符合每个分布的条件概率,即 γ j i \gamma_{ji}γji
- 然后利用计算好的 γ j i \gamma_{ji}γji 去计算新的 μ , ∑ , α \mu,\sum,\alphaμ,∑,α ,用新的参数去更新我们的分布模型,获得新的概率密度
- 利用新的分布模型计算每个样本的条件概率,重复2-4步骤,不断地进行更新模型分布参数
- 直到模型收敛,达到一定精度,停止迭代
- 根据我们新的模型参数获取每个样本的条件概率,然后获取的最大值,即 λ j = a r g m a x i ∈ { 1 , 2 , . . . k } γ j i \lambda_j=argmax_{i\in \{1,2,...k\}}\gamma_{ji}λj=argmaxi∈{1,2,...k}γji,将其划分到相应的簇中
- 结束