机器学习-sklearn-高斯混合模型-学习笔记

news2024/11/27 10:27:33

文章目录

  • 前言
  • 一、如何估计参数
  • 二、二分类原生代码实现
  • 三、sklearn实现模型
  • 总结



前言

  • 学习笔记

  • 学习视频:https://www.bilibili.com/video/BV1rB4y1v7dA/?spm_id_from=333.788&vd_source=af83080eba7b379d3fda36e341bdb195

  • 使用高斯混合模型的原因:

    • 模型可能总体不属于高斯模型分布
      在这里插入图片描述

    • 将数据分为两个高斯模型 再将他们混合起来
      在这里插入图片描述

  • 混合公式:

在这里插入图片描述
其中:
Π 该不同高斯模型对于整个模型所占的权重
N(μ,σ) 不同的高斯模型

  • 单个模型公式

    • 一维特征
      在这里插入图片描述
      其中:
      μ 是已知数据集的均值
      σ 是已知数据集的方差

    • 多维特征
      在这里插入图片描述
      其中:
      d 的值为确定的维度(n)
      ∑ 是斜方差(nxn的矩阵)
      μ 是均值(n维向量)

  • 图像

    • 一维特征
      在这里插入图片描述
    • 多维特征


一、如何估计参数

  • 我们所需的参数:

    • Π
    • μ
    • σ
    • 计算公式:
      在这里插入图片描述
  • 计算过程:

    • 例子:已知一部分身高 求这一部分身高的男女分布
x1x 2x 3x 4
1.581.781.621.81
    • 假设
μ1 = 1.71σ1 = 0.31Π1 = 0.5
μ2= 1.62σ2 = 0.26Π2 = 0.5
    • 求(相当于归一化)
    • r(1,1) =Π1xN(x1|μ1,σ1) / (Π1xN(x1|μ1,σ1) +Π2xN(x1|μ2,σ2) )
    • 其中:N(x1|μ1,σ1) 将数据带入高斯模型公式
    • 依次求得 r(2,1) , r(3,1) , r(4,1) , r(1,2) , r(1,3) ,r(1,4)
    • 求N
    • N1=∑r(i,1) N2=∑r(i,2)
    • 求新的Π
    • Π1 = N1/N(N = 样本个数) Π2 =N2/N
    • 求新的μ
    • μ1= 1/N1 x (∑r(i,1) x xi)
    • μ2= 1/N2 x (∑r(i,2) x xi)
    • 求新的σ
    • σ1 = 1/N1 x (∑r(i,1) x (xi-μ1)^2)
    • σ2 = 1/N2 x (∑r(i,2) x (xi-μ2)^2)
    • 其中: 平方那里如果是多维 就是改为乘以矩阵转置
    • 更新之前的所有权重,迭代到一定次数最后达到收敛


二、二分类原生代码实现

import numpy as np

#随机种子
np.random.seed(0)

#假设男生的身高均值是1.71 标准差为 0.056
man_mean = 1.71
man_sigma = 0.056

#数据个数
num =10000
#男生数据
rand_data_man = np.random.normal(man_mean,man_sigma,num)
#标签 设男生的标签为1
y_man = np.ones(num)

#女生的身高均值1.58 标准差 0.051
np.random.seed(0)
women_mean = 1.58
women_sigma = 0.051
rand_data_women = np.random.normal(women_mean,women_sigma,num)
y_women = np.zeros(num)

#将数据混合
data = np.append(rand_data_man,rand_data_women)
data = data.reshape(-1,1)
# print(data)
y = np.append(y_man,y_women)
# print(y)


#聚类 用于两个类别
from scipy.stats import multivariate_normal

#迭代次数
num_iter = 1000
n,d = data.shape        #n多少个数据 d维度
# print(n,d)
#初始化参数
mu1 = data.min(axis=0)      #取最小的值 axis=0返回每列最小值
mu2 = data.max(axis=0)
sigma1 = np.identity(d)    #identity创建方阵
sigma2 = np.identity(d)
# print(sigma2)
pai = 0.5

for i in range(num_iter):
    #计算r --gamma
    #计算N(x|mu,sigma)
    norm1 = multivariate_normal(mu1,sigma1)
    norm2 = multivariate_normal(mu2,sigma2)
    tau1 = pai*norm1.pdf(data)
    tau2 = (1-pai)*norm2.pdf(data)
    r1 = tau1/(tau2+tau1)
    r2 = 1-r1

    #计算新的mu
    mu1 = np.dot(r1, data) / np.sum(r1)
    mu2 = np.dot(r2, data) / np.sum(r2)

    #计算新的sigma
    sigma1 = np.dot(r1 * (data - mu1).T, data - mu1) / np.sum(r1)
    sigma2 = np.dot(r2 * (data - mu2).T, data - mu2) / np.sum(r2)

    #pai
    pai = np.sum(r1)/n

print('均值',mu1,mu2)
print('方差',sigma1,sigma2)
print(pai)


三、sklearn实现模型

#数据
# 随机种子
np.random.seed(0)

# 假设男生的身高均值是1.71 标准差为 0.056
man_mean = 1.71
man_sigma = 0.056

# 数据个数
num = 10000
# 男生数据
rand_data_man = np.random.normal(man_mean, man_sigma, num)
# 标签 设男生的标签为1
y_man = np.ones(num)

# 女生的身高均值1.58 标准差 0.051
np.random.seed(0)
women_mean = 1.58
women_sigma = 0.051
rand_data_women = np.random.normal(women_mean, women_sigma, num)
y_women = np.zeros(num)

# 将数据混合
data = np.append(rand_data_man, rand_data_women)
data = data.reshape(-1, 1)
# print(data)
y = np.append(y_man, y_women)
# print(y)


#模型
from sklearn.mixture import GaussianMixture
#n_components 有多少种类 max_iter迭代多少次
model = GaussianMixture(n_components=2,max_iter=1000)

model.fit(data)

print('pai:',model.weights_[0])
print('mean:',model.means_)
print('方差:',model.covariances_)


#预测
from sklearn.metrics import accuracy_score
y_pred = model.predict(data)

print(accuracy_score(y,y_pred))


总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

03137计算机网络原 - 物理层

物理层 基础概念 OSI模型最底层 功能 为在链路实体间传送比特流而对物理连接的 接通 维持 和 拆除 提供机械,电气,功能和规程方面的方法作用 尽可能屏蔽现有多种多样的硬件设备,传输媒体和通信手段的差异。确保原始数据可以在各种物理媒介上传输任务特性 机械特性 指明接…

Linux环境变量与程序地址空间

Linux环境变量与程序地址空间 文章目录Linux环境变量与程序地址空间1.环境变量1.1 环境变量概念与深入理解1.2 代码获取环境变量的方法1.3 系统调用获取和设置环境变量的方法2.程序地址空间2.1 程序地址空间图(准确来说是进程地址空间图)2.2 程序地址空间的验证2.3 进程地址空间…

概率论中的几个重要悖论问题

1. 蒙提霍尔问题(三门问题) 三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Lets Make a Deal。问题名字来自该节目的主持人蒙提霍尔(Monty Hall&…

【笑小枫的SpringBoot系列】【十八】SpringBoot中的Properties配置

本文简介🎨 随着我们的演示功能越来越多,里面的配置也越来越多,我们怎么更好的来管理这些配置呢? 实际项目中,我们肯定会有开发环境、测试环境、生产环境,我们又该怎么便捷的配置这些环境呢? …

CANopen之SDO,PDO

一、简述 CAN 总线是一种串行通信协议,具有较高的通信速率的和较强的抗干扰能力,可以作为现场总线应用于电磁噪声较大的场合。由于 CAN 总线本身只定义ISO/OSI 模型中的第一层(物理层)和第二层(数据链路层&#xff09…

nodejs+mysql网上书店图书销售购物商城系统vue

系统功能 此系统的功能分为用户模块和管理员模块: 1、用户后台功能模块包括:首页、个人中心、订单评价管理、我的收藏管理、订单管理模块。 2、前台首页功能模块包括:首页、图书信息、图书资讯、个人中心、后台管理、购物车、在线聊天模块。 …

SAP MDG —— 更好地理解你的数据变更

概念 在SAP MDG on SAP S/4HANA 2021中,SAP发布了一种全新的数据分析框架:变更请求中的主数据变更分析。依赖该框架,你可以为你的最终用户提供强大的数据分析功能,以深度洞悉变更请求中到底变化了哪些数据。 使用这些分析功能&a…

Thinkphp6 分布式事务异常处理 1440 XAER_DUPID: The XID already exists

Mysql分布式事务,前提条件 MySQL中只有当隔离级别设置为Serializable的时候才能使用分布式事务。 执行两个命令确认环境 show variables like innodb_support_xa;show variables like %tx_iso%;异常信息 根据官方分布式示例 public function test(){Db::transa…

input空格回车输入标签

分析 我们自己封装input输入标签需要注意一下几点: 样式实现,span实现标签效果、input隐藏边框(Element-UI可以直接使用tag)。事件监听,确定生成标签的操作,可以是回车,并且需要监听离开焦点的情况。标签限制,最多几个,以及输入验证 html:&…

使用CDC模式改造遗留系统

项目改造背景及挑战 在我们经历的各种遗留系统改造之旅中,使用**绞杀者模式**来改造一个巨大的单体服务,是一种被广泛采用且验证行之有效的手段,在应用传统的绞杀者模式时,通常采用逐步替换的方式,将遗留系统中某一独…

b站pink老师JavaScript的ES6面向对象课程中:正则表达式案例代码——表单验证

目标效果: 1.当输入的手机号,QQ号,昵称,短信验证码,登录密码,确认密码:如果符合标准,就提示正确的文字;如不符合标准,则提示不正确。 2.判断确认密码是否与登录密码相等…

落实交通强国,鄂州临空区联手蘑菇车联打造新时代内陆开放高地

临空经济与智能网联、自动驾驶能擦出什么样的火花?今年7月,鄂州花湖机场投运,标志着这个湖北省“一号工程”正式蝶变为亚洲规模最大、自动化程度行业领先的航空货运枢纽。鄂州花湖机场项目也是湖北加快建设交通强国示范区、打造新时代“祖国立…

Spring Boot配置多个日志文件记录不同类日志示例

了解如何使用多个文件追加器在Spring 引导应用程序中创建多个日志文件。了解如何使用翻转策略、归档等配置所有文件追加器,wiihlog4j2和日志配置。 1. 带登录的多个日志文件 以下文件包含 5 个记录器。我们可以根据需要创建更多的记录器。logback.xml console– …

NeRF源码运行与学习(pytorch)

神经辐射场(NeRF)是一个简单的全连接网络(权重约为5MB),经过训练,可以使用渲染损失再现单个场景的输入视图。网络直接从空间位置和观看方向(5D输入)映射到颜色和不透明度&#xff08…

翻译文本的软件有哪些?这几个翻译工具你可以试试看

文本翻译,是我们在生活中或工作中比较常见的一个需求。例如有时收到一份英文资料,没时间逐字翻译成中文,那就需要借助翻译工具来帮忙了;或者是有时需要将一些内容翻译成英文,而碰巧遇到句子不知道如何翻译,…

DDPM(Denoising Diffusion Probabilistic Models)扩散模型简述

引言 扩散模型最早是在2015年的Deep Unsupervised Learning using Nonequilibrium Thermodynamics文章中提出的,但当时扩散模型并不work,所以并没有被广泛应用。在2020年,Denoising Diffusion Probabilistic Models(简称为DDPM)的出现&#…

[附源码]java毕业设计校园闲置物品交易

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

MCE | 动物实验溶剂大讨论

在动物实验中,药物通常会以溶液 (Solution) 或混悬液 (Suspension) 的形式给药。我们需选择合适的溶剂,可以辅助超声加热措施,得到澄清的溶液或适合给药的混悬液。■ 人见人爱的生理盐水/PBS 对于水溶性很好的产品,用生理盐水 (Sa…

中学数学课程标准(教学大纲)的传承与变迁

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1研究背景及意义 1 1.2研究现状 1 1.3研究内容 3 第二章 1990以来我国中学数学课程标准(教学大纲)改革回顾 4 2.1改革回顾 4 2.1.1 1990年数学教学改革的内容 4 2.1.2 2001年数学教学改革的内容 5 2.1.3 2011…

XSS(Cross-site Script,跨站脚本)漏洞笔记

起源 最早的 XSS 漏洞可追溯到 1999 年末,微软安全工程师发现一些网站遭到攻击,网站被插入了一些恶意脚本和图像标签。随后,微软对此类漏洞进行研究分析,并在 2000 年 1 月,正式使用“cross-site scripting”这个名称…