当前位置: 首页 > news >正文

建模杂谈系列254 GMM的拟合

说明

首先假设数据由多个正态分布叠加而成,这个场景应该也是比较有普遍意义的。

内容

数据还是之前产生的三波

import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture# 生成示例数据
np.random.seed(0)
data1 = np.random.normal(loc=20, scale=5, size=300)
data2 = np.random.normal(loc=50, scale=10, size=700)
data3 = np.random.normal(loc=70, scale=30, size=500)
data = np.concatenate([data1, data2,data3])

进行拟合并画图


# 拟合 GMM
gmm = GaussianMixture(n_components=3, random_state=0)
gmm.fit(data.reshape(-1, 1))# 生成拟合的 GMM 密度曲线
xmin, xmax = plt.xlim()
x = np.linspace(data.min(), data.max(), 1000)
logprob = gmm.score_samples(x.reshape(-1, 1))
pdf = np.exp(logprob)# 绘制直方图和拟合的 GMM 密度曲线
plt.hist(data, bins=30, density=True, alpha=0.6, color='g', label='Data')
plt.plot(x, pdf, 'k', linewidth=2, label='GMM')# 添加图例和标签
plt.title('Gaussian Mixture Model Fit')
plt.xlabel('Value')
plt.ylabel('Density')
plt.legend()# 显示图形
plt.show()

在这里插入图片描述
从图像上看,是不太对的,看起来只有两个波。但是看模型拟合的参数是对的

gmm.means_
array([[49.35769361],[75.36264743],[20.41493429]])

再看标准差

import numpy as np
from sklearn.mixture import GaussianMixture
# 获取每个成分的标准差
std_devs = np.sqrt(gmm.covariances_).flatten()
print(f"Standard Deviations of each component: {std_devs}")
Standard Deviations of each component: [ 9.57180175 27.62374819  5.43236064]

已经非常接近真相了。

很有意思,把几种豆子混在一起撒进去,然后还能分出来。

如果假设的n_components为7,乍一看不出问题,之后再用其他来进行检验。之前我还认为多给的类会几种在一起,现在看来不是这样。

gmm.means_array([[ 45.51781429],[ 76.17244197],[ 30.74652342],[ 94.62139471],[ 56.99546783],[ 19.9330969 ],[117.56899306]])

方差

Standard Deviations of each component: [ 5.20720528  7.61508437  7.3278159   8.05410436  5.92218708  7.0477194215.85456659]

http://www.mrgr.cn/news/18383.html

相关文章:

  • openwrt 原版系统个人优化
  • IntelliJ IDEA下载安装
  • 【C++ 面试 - STL】每日 3 题(四)
  • HTTP/2
  • ArrayList 和 LinkedList 之间的主要区别。在什么情况下你会选择使用 ArrayList 而不是 LinkedList,反之亦然?
  • RuoYi-Cloud 部署与配置 [CentOS7]
  • Python青少年简明教程:函数
  • 测试:TestGRPCDiscovery
  • 3A介绍-Authentication(认证)、Authorization(授权)和Accounting(计费/核算)
  • X86架构(六)——过程调用
  • 正则表达式优化建议
  • 【网络安全】Bingbot索引投毒实现储存型XSS
  • 数据解读——基于《择偶偏好中的性别差异和社会阶层异质性——基于选择实验法的探索》
  • 【最新华为OD机试E卷】最大报酬(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)
  • MFC dll无法显示tooltip问题
  • 仿论坛项目--第二部分习题
  • 【Next.js 入门指南】5分钟创建你的第一个 Next.js 应用
  • 华为云征文 | 华为云Flexus云服务器X实例之Docker环境下部署JmalCloud个人网盘
  • Linux运维--Firewall防火墙命令以及规则等详解(全)
  • 奉加微PHY6233进入DTM模式;TX单音信号;