【机器学习】聚类算法——高斯混合聚类(理论+图解)

简介: 【机器学习】聚类算法——高斯混合聚类(理论+图解)

简 介:下面是我在学习时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。

 

关键词:高斯混合聚类、机器学习、极大似然估计

在讲高斯混合聚类算法之前先补充以下相关的数学知识,由于篇幅原因,只是简单叙述,如需详细内容,请查阅相关资料

一、正态分布

在概率论中我们学过某些数值在一定情况下是符合正态分布的。

我们经常见到某某数据符合正态分布,那么它到底是什么意思呢?

正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。

若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

正态分布是许多统计方法的理论基础。检验、方差分析、相关和回归分析等多种统计方法均要求分析的指标服从正态分布。许多统计方法虽然不要求分析指标服从正态分布,但相应的统计量在大样本时近似正态分布,因而大样本时这些统计推断方法也是以正态分布为理论基础的。

为什么很多假设都是使用正态分布呢?为什么不适用像泊松分布、指数分布这些分布呢?

  1. 根据中心极限定律,如果我们的样本足够多的情况下,我们的数据是符合正态分布的
  2. 正态分布是属于一种正态分布,具有良好的数学性质,便于建模

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πσ1e2σ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)21{σ12(x1μ1)22ρσ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π)2n211e21(Xμ)T1(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=1kαip(Xμi,i)

其中 α \alphaα 就代表我们选择每个簇的概率,那么它的和肯定是等于1的,∑ i = 1 k α i = 1 \sum_{i=1}^k\alpha_i=1i=1kαi=1

我们现在想计算对于某一个数据符合哪个簇的概率,如果对应哪个簇的概率大,那么该数据就划分为该簇内,也就对应条件概率 p ( Z ∣ x ) p(Z|x)p(Zx) ,意思就是在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=ixj)=p(xj)P(zj=i)p(xjzj=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=1mp(xj))=j=1mln(i=1kαip(xjui,))

对上述函数进行求导,然后另导数为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γjij=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γjij=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=1ai0,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=1kαi1)

解得:

α i = 1 m ∑ j = 1 m γ j i \alpha_i=\frac{1}{m}\sum_{j=1}^m\gamma_{ji}αi=m1j=1mγji

三、详细算法流程

下面的图是我从西瓜书中摘出来的,公式看起来有点多,下面我用简单的语言将整个流程叙述一下。

  1. 首先在算法开始前需要确立簇的个数k,这也就对应着k个不同的高斯分布
  2. 初始化每个簇的高斯分布参数,μ , ∑ , α \mu,\sum,\alphaμ,,α,用于构建高斯混合概率密度,由于是开始还没有数据,肯定是要随机给值的
  3. 遍历所有的样本数据,计算每个样本符合每个分布的条件概率,即 γ j i \gamma_{ji}γji
  4. 然后利用计算好的 γ j i \gamma_{ji}γji 去计算新的 μ , ∑ , α \mu,\sum,\alphaμ,,α ,用新的参数去更新我们的分布模型,获得新的概率密度
  5. 利用新的分布模型计算每个样本的条件概率,重复2-4步骤,不断地进行更新模型分布参数
  6. 直到模型收敛,达到一定精度,停止迭代
  7. 根据我们新的模型参数获取每个样本的条件概率,然后获取的最大值,即 λ 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,将其划分到相应的簇中
  8. 结束
目录
相关文章
|
1天前
|
机器学习/深度学习 运维 算法
【Python机器学习专栏】异常检测算法在Python中的实践
【4月更文挑战第30天】本文介绍了异常检测的重要性和在不同领域的应用,如欺诈检测和网络安全。文章概述了四种常见异常检测算法:基于统计、距离、密度和模型的方法。在Python实践中,使用scikit-learn库展示了如何实现这些算法,包括正态分布拟合、K-means聚类、局部异常因子(LOF)和孤立森林(Isolation Forest)。通过计算概率密度、距离、LOF值和数据点的平均路径长度来识别异常值。
|
1天前
|
机器学习/深度学习 数据可视化 算法
【Python机器学习专栏】t-SNE算法在数据可视化中的应用
【4月更文挑战第30天】t-SNE算法是用于高维数据可视化的非线性降维技术,通过最小化Kullback-Leibler散度在低维空间保持数据点间关系。其特点包括:高维到二维/三维映射、保留局部结构、无需预定义簇数量,但计算成本高。Python中可使用`scikit-learn`的`TSNE`类实现,结合`matplotlib`进行可视化。尽管计算昂贵,t-SNE在揭示复杂数据集结构上极具价值。
|
1天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。
|
1天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】层次聚类算法的原理与应用
【4月更文挑战第30天】层次聚类是数据挖掘中的聚类技术,无需预设簇数量,能生成数据的层次结构。分为凝聚(自下而上)和分裂(自上而下)两类,常用凝聚层次聚类有最短/最长距离、群集平均和Ward方法。优点是自动确定簇数、提供层次结构,适合小到中型数据集;缺点是计算成本高、过程不可逆且对异常值敏感。在Python中可使用`scipy.cluster.hierarchy`进行实现。尽管有局限,层次聚类仍是各领域强大的分析工具。
|
1天前
|
机器学习/深度学习 算法 数据挖掘
【Python 机器学习专栏】K-means 聚类算法在 Python 中的实现
【4月更文挑战第30天】K-means 是一种常见的聚类算法,用于将数据集划分为 K 个簇。其基本流程包括初始化簇中心、分配数据点、更新簇中心并重复此过程直到收敛。在 Python 中实现 K-means 包括数据准备、定义距离函数、初始化、迭代和输出结果。虽然算法简单高效,但它需要预先设定 K 值,且对初始点选择敏感,可能陷入局部最优。广泛应用在市场分析、图像分割等场景。理解原理与实现对应用聚类分析至关重要。
|
1天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习算法的原理与应用
【4月更文挑战第30天】集成学习通过组合多个基学习器提升预测准确性,广泛应用于分类、回归等问题。主要步骤包括生成基学习器、训练和结合预测结果。算法类型有Bagging(如随机森林)、Boosting(如AdaBoost)和Stacking。Python中可使用scikit-learn实现,如示例代码展示的随机森林分类。集成学习能降低模型方差,缓解过拟合,提高预测性能。
|
1天前
|
机器学习/深度学习 算法 Python
【Python 机器学习专栏】随机森林算法的性能与调优
【4月更文挑战第30天】随机森林是一种集成学习方法,通过构建多棵决策树并投票或平均预测结果,具有高准确性、抗过拟合、处理高维数据的能力。关键性能因素包括树的数量、深度、特征选择和样本大小。调优方法包括调整树的数量、深度,选择关键特征和参数优化。Python 示例展示了使用 GridSearchCV 进行调优。随机森林广泛应用于分类、回归和特征选择问题,是机器学习中的重要工具。
|
11天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
1天前
|
算法 数据安全/隐私保护 计算机视觉
基于DCT变换的彩色图像双重水印嵌入和提取算法matlab仿真
**算法摘要:** - 图形展示:展示灰度与彩色图像水印应用,主辅水印嵌入。 - 软件环境:MATLAB 2022a。 - 算法原理:双重水印,转换至YCbCr/YIQ,仅影响亮度;图像分割为M×N块,DCT变换后嵌入水印。 - 流程概览:两步水印嵌入,每步对应不同图示表示。 - 核心代码未提供。
|
1天前
|
机器学习/深度学习 算法 数据可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化