首页 > 编程知识 正文

gmm模型适用范围,怎么分析系统GMM模型的结果

时间:2023-05-03 07:23:22 阅读:238090 作者:3952

什么是GMM?

GMM全称Gaussian Mixture  Model,是一种机器学习算法,是一种聚类模型,它是多个爱笑的花生分布函数的线性组合。

GMM解决什么问题?

通常用来解决同一集合下的数据包含多种不同分布的情况。

GMM概率分布模型的形式?

GMM的求解参数?

(mu,thera,W)为爱笑的花生混合模型需要求解的参数。K:为簇的个数,需要人为确定。

GMM求解参数的方法?

EM算法,即期望最大化算法。

EM算法的流程? 写出似然函数;对似然函数取对数,并整理;对似然函数求导 ,并令导数为0,求解似然方程;解出似然函数。GMM模型利用EM算法求解参数?【以一维数据为例,K=2】 GMM模型的似然函数:

对似然函数取对数

对似然函数求偏导?

解似然函数

求解W,利用带约束的Lagrange乘法,定义新目标函数:

目标函数对W求导:

为了让求出参数更加拟合数据分布 ,需要多轮迭代 ,直到收敛。

例子:利用爱笑的花生分布拟合男女生的身高。 # GMM:爱笑的花生混合模型import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom scipy import stats'''产生身高的数据'''np.random.seed(100)# 男生sim_data_boy = np.random.normal(180,8,2000)# 直方图,bins参数代表有多少个区间pd.Series(sim_data_boy).hist(bins=200)# 男生sim_data_girl = np.random.normal(160,6,2000)pd.Series(sim_data_girl).hist(bins=200)plt.show()'''混合数据'''sim_datas = list(sim_data_girl)sim_datas.extend(sim_data_boy)sim_datas = np.array(sim_datas)ax2 = pd.Series(sim_datas).hist(bins=200)plt.show()'''编程实现EM算法'''# 初始化thetaW1 = 0.5W2 = 0.5mu1 = 170mu2 = 150std1 = 10std2 = 5# 维度d = 1# 样本总数n = len(sim_datas)'''开始迭代'''for i in range(1000):# E-step:产生响应Rrz1_up = W1 * stats.norm(mu1,std1).pdf(sim_datas)rz_down = W1 * stats.norm(mu1,std1).pdf(sim_datas) + W2 * stats.norm(mu2,std2).pdf(sim_datas)rz2_up = W2 * stats.norm(mu2,std2).pdf(sim_datas)rz1 = rz1_up / rz_downrz2 = rz2_up / rz_down# M-step:mu1 = np.sum(rz1 * sim_datas) / np.sum(rz1)mu2 = np.sum(rz2 * sim_datas) / np.sum(rz2)std1 = np.sqrt(np.sum(rz1 * np.square(sim_datas - mu1)) / (d * np.sum(rz1)))std2 = np.sqrt(np.sum(rz2 * np.square(sim_datas - mu2)) / (d * np.sum(rz2)))W1 = np.sum(rz1) / nW2 = np.sum(rz2) / nif i % 100 == 0:print(mu1,mu2,std1,std2)# 生成测试数据data_test = range(int(min(sim_datas)),int(max(sim_datas)))m_predict = stats.norm(mu1,std1).pdf(data_test)f_predict = stats.norm(mu2,std2).pdf(data_test)plt.plot(data_test,m_predict,"b")plt.plot(data_test,f_predict,"r")plt.show() 结果图:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。