【数据不完整?用EM算法填补缺失】期望值最大化 EM 算法:睹始知终

news2024/10/6 22:26:50

期望值最大化算法 EM:睹始知终

    • 算法思想
    • 算法推导
    • 算法流程
      • E步骤:期望
      • M步骤:最大化
      • 陷入局部最优的原因
    • 算法应用
      • 高斯混合模型(Gaussian Mixture Model, GMM)
        • 问题描述
        • 输入输出
        • Python代码实现

 


算法思想

期望值最大化方法,是宇宙演变、物种进化背后的动力。

如果一个公司在制定年终奖标准时,把每个员工一半的奖金和公司价值观挂钩,人们就会背诵创始人每个语录 — 整个公司都会自动迭代寻找最优解,每个人说话都是公司价值观。

如果一个国家足球不行,把每个孩子的高考分数和足球水平挂钩,人们就会大力投资足球设施,大爷大妈也会把广场让出去给孙子踢足球,谁跟我孙子抢我真的会发疯 — 整个国家都会自动迭代寻找最优解,每个人说话都是公司价值观。

这个思想在算法中就是期望最大化 EM 算法,只要给出一个收益函数, 计算机就会自动的寻找收益最大的那个点。

  • 在每一时刻,算出能够最大化收益(期望值)的方向,沿着这个方向走一小步
  • 然后再从新的起点重复这个过程,不论从何处起始,最后一定能够达到收益最大的那个终点

 

EM 算法本质是迭代策略,用于含有隐变量的统计模型中,交替计算期望步骤最大化步骤,来寻找参数的最优估计。

比如看故事书,但故事中有一些缺失的部分(这些就是隐变量)。

你的目标是填补这些缺失部分,使得整个故事变得连贯和合理。

EM 算法就像一个两步循环过程,帮助你逐渐完善这个故事:

  • 期望步骤 (E 步骤): 在这一步,你根据目前所知的信息,对故事中缺失的部分做出最佳猜测。就好比你根据故事的上下文来推测这些缺失部分可能的内容。

  • 最大化步骤 (M 步骤): 接下来,你根据这些猜测来重新讲述整个故事,并调整故事中其他已知部分的细节,使得整体故事更加合理。这个过程就像根据新的假设来优化故事的连贯性。(M步骤可以使用 MLE 或 MAP)。

这个循环反复进行:你根据当前的故事版本来改善你对缺失部分的猜测,然后再用这些新猜测来优化整个故事。

随着每次迭代,故事变得越来越连贯,直到最终达到一个点,你觉得再怎么调整也无法使故事更好了。

这时,你就找到了最合适的版本来填补缺失部分,你找到了模型参数的最优估计。

 
再如 市场营销策略

  • 公司在设计营销策略时,通常会试图理解消费者的隐藏需求和偏好(隐藏变量),并据此调整其产品或服务(参数)。

  • 通过市场反馈,公司不断调整其策略以最大化销售或品牌影响力,这类似于EM算法的期望步骤和最大化步骤的迭代过程。

算法推导

EM 算法论文:https://web.mit.edu/6.435/www/Dempster77.pdf

概率图模型再复杂都可以简化成俩个变量:观测变量x、隐变量z

比如你正在看一部电影:

  • 电影中你能直接看到的场景和角色对话等就像是“观测变量”,这些是你直接获得的信息,不需要猜测或推理。
  • 然而,电影也有许多你看不到的部分,比如角色的内心想法、未展示的背景故事,或者导演留下的悬念。这些就像是“隐变量”,你无法直接观察它们,但它们对整个故事的剧情发展(趋势就是人心所向)至关重要。

p ( x ∣ θ ) = ∏ i = 1 n p ( x i ∣ θ ) L ( θ ) = log ⁡ p ( x ∣ θ ) = ∑ i = 1 n log ⁡ p ( x i ∣ θ ) = ∑ i = 1 n log ⁡ ∑ z p ( x i , z i ∣ θ ) \begin{aligned} &p(\mathbf{x}|\theta) \begin{aligned}=\prod_{i=1}^np(x_i|\theta)\end{aligned} \\ &{ L ( \theta )} =\operatorname{log}p(\mathbf{x}|\theta) \\ &=\sum_{i=1}^n\log p(x_i|\theta) \\ &=\sum_{i=1}^n\log\sum_zp(x_i,z_i|\theta) \end{aligned} p(xθ)=i=1np(xiθ)L(θ)=logp(xθ)=i=1nlogp(xiθ)=i=1nlogzp(xi,ziθ)

那我们逐步拆解公式原意:

  1. 联合概率分布

    • 第一行公式表示,观测数据集 x 在给定参数 θ 的条件下的联合概率分布
    • 比如你有 3 张卡片,每张卡片上都有一个秘密数字,这个数字可以是 1、2、3 中的任何一个,我们现在要猜每张卡片上的数字是什么。每张卡片上数字的猜测都是独立的,不会影响其他卡片上的猜测。
    • 在数学中,这就是我们说的“联合概率分布”,即我们想知道,所有卡片上每一种可能的数字组合出现的整体概率是多少
    • 如所有卡片上都是1的概率是多少(111)、如所有卡片上是123的概率是多少(123)、(222)、(321)、…、(333) 所有可能的数字组合及其相应的概率。
  2. 对数似然函数

    • 第二行公式,为了不忘记我们的猜测,我们决定把每次猜的结果写在一个日记本上。因为数字可能很大,所以我们用一种特别的数学“捷径”来记日记,这种捷径就是对数。这样,即使我们猜的数字很大,日记本上的数字也不会太长,更容易计算。
    • 在数学中,写在日记本上的这种方法叫做“对数似然函数”,一个帮助我们处理大数字的数学工具。
  3. 对数似然的求和

    • 第三行公式,现在我们决定把日记本上所有的数字加起来,因为我们用了对数,所以加起来很容易。这就像是玩一个加法游戏,把所有的小数字加起来,得到一个总分。
  4. 边缘概率

    • 第四行公式,第1张是1、第2张是2,第 3 张卡片藏在盒子里(只有第 3 张未知),我们只知道盒子里可能藏着什么数字(1、2、3)。那先专注于部分已知信息,而忽略未知部分的具体细节,猜对所有看得见的卡片的概率是多少。
    • 就是计算 第1张是1、第2张是2 的概率,忽略第三张卡片可能的值。
    • 这就是数学中的“边缘概率” —— 它允许我们在部分信息未知的情况下,仍对已知部分进行概率计算。

在概率分布上,就是先猜一个 z 的分布(记为 q),使用 E、M 步骤,去逼近真实分布 L ( θ ) L(\theta) L(θ)

最后让猜的分布像爬楼梯一样,找到真实分布 L ( θ ) L(\theta) L(θ) 的最高点(最优解)。

用数学公式描述这个过程:

L ( θ ) = ∑ i = 1 n log ⁡ ∑ z p ( x i , z i ∣ θ ) = ∑ i = 1 n log ⁡ ∑ z ∞ q i ( z ) p ( x i , z i ∣ θ ) q i ( z ) ≥ ∑ i = 1 n ∑ z q i ( z ) log ⁡ p ( x i , z i ∣ θ ) q i ( z ) \begin{aligned} L(\theta)& \begin{aligned}=&\sum_{i=1}^n\log\sum_zp(x_i,z_i|\theta)\end{aligned} \\ &\begin{aligned}=&\sum_{i=1}^n\log\sum_z^\infty q_i(z)\frac{p(x_i,z_i|\theta)}{q_i(z)}\end{aligned} \\ &\geq\sum_{i=1}^n\sum_zq_i(z)\log\frac{p(x_i,z_i|\theta)}{q_i(z)} \\ \end{aligned} L(θ)=i=1nlogzp(xi,ziθ)=i=1nlogzqi(z)qi(z)p(xi,ziθ)i=1nzqi(z)logqi(z)p(xi,ziθ)

  1. 第一行 L ( θ ) = ∑ i = 1 n log ⁡ ∑ z p ( x i , z i ∣ θ ) L(\theta) = \sum_{i=1}^n \log \sum_z p(x_i, z_i|\theta) L(θ)=i=1nlogzp(xi,ziθ)

    • 比如你正在玩一个寻宝游戏,你有一张地图( θ \theta θ),地图上标记了很多可能藏宝的地方(这里的藏宝地方就是 x i x_i xi z i z_i zi)。
    • x i x_i xi 是你可以看到的地方,而 z i z_i zi 是地图上标记的,但实际上可能藏宝也可能没藏宝的秘密地方。这一行的意思是,你在尝试弄清楚,根据地图,每个地方藏宝的可能性有多大。
  2. 第二行 = ∑ i = 1 n log ⁡ ∑ z ∞ q i ( z ) p ( x i , z i ∣ θ ) q i ( z ) = \sum_{i=1}^n \log \sum_z^\infty q_i(z) \frac{p(x_i, z_i|\theta)}{q_i(z)} =i=1nlogzqi(z)qi(z)p(xi,ziθ)

    • 这一步就像你在用一种特别的放大镜 q i ( z ) q_i(z) qi(z) 来看地图( θ \theta θ)。
    • 这个放大镜可以告诉你,每个秘密地方真的藏宝的机会有多大。
    • 你用这个放大镜和地图一起,来计算每个地方可能藏宝的几率。
  3. 第三行 ≥ ∑ i = 1 n ∑ z q i ( z ) log ⁡ p ( x i , z i ∣ θ ) q i ( z ) \geq \sum_{i=1}^n \sum_z q_i(z) \log \frac{p(x_i, z_i|\theta)}{q_i(z)} i=1nzqi(z)logqi(z)p(xi,ziθ)

    • 最后,这一步就像你在记录你的发现。
    • 对于地图上的每一个地方,你都写下了:根据我的放大镜和地图,我认为这里藏宝的机会有多大。”
    • 这样,你就得到了一个完整的藏宝地图,上面标记了所有可能藏宝的地方和它们的可能性。

然后根据 Jeasen 不等式,得到公式的下界。

最终的公式是: J ( z , q ) J(z,q) J(z,q)

  • 不断的改变 z,就能不断搜索 θ \theta θ 最大值(概率分布图中的最高点)

于是,EM 算法可分为 E 步骤、M 步骤。

算法流程

E步骤:期望

E 步骤:猜的分布 q 不变,最大化 z。

在图中,q 沿着 x 轴上升,碰到真实分布z 就停止,开始 M 步骤。

M步骤:最大化

M 步骤:猜的分布 q 寻优,z 不变。

在图中,q 沿着 y 轴水平移动,碰不到真实分布z 就停止,开始 E 步骤。

陷入局部最优的原因

EM 算法可能会陷入局部最优。

  1. 非凸目标函数:EM算法通常用于优化非凸(non-convex)的目标函数。在非凸函数中,可能存在多个局部最优解,这意味着算法可能会在达到一个局部最优点后停止,而这个点不一定是全局最优的。

  2. 初始值依赖性:EM算法的结果往往依赖于初始参数的选择。如果初始参数选得不好,算法可能会被引导到一个局部最优解而不是全局最优解。

  3. 迭代方式:EM算法通过交替执行其两个步骤(E步和M步)来逐渐改进参数估计。这种迭代方式可能会导致算法“陷入”某个局部区域的最优解,特别是在目标函数有多个峰值的情况下。

  4. 模型复杂性和数据的局限性:在一些复杂模型或者数据不足的情况下,EM算法可能无法准确估计出全局最优参数,从而陷入局部最优。

解决这些问题的一种方法是通过多次运行算法,每次使用不同的初始参数,然后从中选择最好的结果。

此外,还可以使用全局优化技术,如模拟退火或遗传算法,来辅助找到更接近全局最优的解。

算法应用

高斯混合模型(Gaussian Mixture Model, GMM)

问题描述

假设我们有一组观测数据点,我们认为这些数据点是由两个不同的高斯分布生成的,但我们不知道每个数据点来自哪个高斯分布。

我们的目标是估计这两个高斯分布的参数(均值和方差)以及每个分布对应的混合系数。

输入输出
  • 输入:一组观测数据点。
  • 输出:两个高斯分布的参数(均值和方差)和混合系数。
Python代码实现
import numpy as np
from sklearn.mixture import GaussianMixture

# 模拟数据生成
np.random.seed(0)
data = np.concatenate([np.random.normal(0, 1, 300), np.random.normal(5, 1.5, 700)]).reshape(-1, 1)

# 应用EM算法
gmm = GaussianMixture(n_components=2, random_state=0)
gmm.fit(data)

# 输出结果
print(f'均值: {gmm.means_.ravel()}')
print(f'方差: {gmm.covariances_.ravel()}')
print(f'混合系数: {gmm.weights_.ravel()}')

这段代码首先生成了一些模拟数据,数据是由两个不同的高斯分布合成的。

然后使用sklearn库中的GaussianMixture模型来应用EM算法。最后,打印出两个高斯分布的均值、方差以及混合系数。

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

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

相关文章

odoo17 | 用户界面的基本交互

前言 现在我们已经创建了我们的新模型及其 相应的访问权限,是时候了 与用户界面交互。 在本章结束时,我们将创建几个菜单以访问默认列表 和窗体视图。 数据文件 (XML) Odoo在很大程度上是数据驱动的,因此模块定义的…

桌面天气预报软件 Weather Widget free mac特点介绍

Weather Widget free for Mac多种吸引人的小部件设计可供选择,可以随时了解天气!还可以在Dock和菜单栏中为您提供简短的天气预报或当前状况的概述。 Weather Widget free for Mac软件介绍 始终在桌面上使用时尚的天气小部件来随时了解天气!多…

团结引擎正式发布,已开放下载

2024年1月1日,Unity 正式发布了针对中国开发者的引擎--团结引擎创世版,现在已经可以开放下载,想体验的小伙伴们可以到官网下载了。 团结引擎是专为中国开发者定制的实时3D引擎,目前是基于Unity 2022LTS版本开发的。团结引擎内置了…

我用 Python 自动生成图文并茂的数据分析报告

reportlab是Python的一个标准库,可以画图、画表格、编辑文字,最后可以输出PDF格式。它的逻辑和编辑一个word文档或者PPT很像。有两种方法: 1)建立一个空白文档,然后在上面写文字、画图等; 2)建…

24、Web攻防——通用漏洞SQL注入MYSQL跨库ACCESS偏移

文章目录 一、SQL注入原理   脚本代码在与数据库进行数据通讯时(从数据库取出相关数据进行页面显示),使用预定义的SQL查询语句进行数据查询。能通过参数传递自定义值来实现SQL语句的控制,执行恶意的查询操作,例如查询…

Kali Linux实现UEFI和传统BIOS(Legacy)引导启动

默认Kali linux安装会根据当前启动的引导模式进行安装 例:以UEFI引导启动安装程序,安装后仅能在UEFI引导模式下进入系统 安装Kali系统 这边基于VirtualBox虚拟机镜像实战操作 首先创建一个Kali虚拟机 这里需要注意,把启动 EFI (只针对某些操作系统)选项勾选上,内存、处理器…

TPS5430正负电源模块

TPS5430正负电源模块 Chapter1 TPS5430正负电源模块一、芯片重要参数二、tps5430参考电路讲解以及PCB布局1.正压降压(15V转12V)2.正压降负压(15V转-12V) Chapter2 使用tps5430制作正负DC-DC降压电源,tps7a47和tps7a33制…

使用sdf文件+urdf文件模拟机器人示例(不用把urdf转sdf)

gazebo版本&#xff1a;harmonic&#xff1b; <launch> <group> <let name"robot_description" value"$(command xacro $(find-pkg-share gazebo_pkg)/urdf/total.xacro)"/> <node pkg"rviz2" exec"rviz2" name…

微信公众号内网穿透本地调试微信授权

微信公众号内网穿透本地调试一直以来都比较麻烦 怕自己忘记&#xff0c; 记录一下 准备 natapp获取一个域名隧道下载nginx配置微信公众号web网页授权域名 1.natapp获取一个域名隧道 在natapp官网&#xff08;https://natapp.cn/&#xff09;进行注册登录后&#xff0c;进入…

零售业物流这个防漏水技术,居然没有翻车!

随着科技的不断发展&#xff0c;水浸监控系统在各个领域得到了广泛应用。水浸监控不仅仅是为了保护建筑结构和设备&#xff0c;更是为了防范因水灾引起的生命安全和财产损失。 因此&#xff0c;为了有效预防和应对水浸事件&#xff0c;水浸监控系统应运而生&#xff0c;成为各行…

基于决策树、随机森林和层次聚类对帕尔默企鹅数据分析

作者&#xff1a;i阿极 作者简介&#xff1a;数据分析领域优质创作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&#x1f4d2;关注哦&#x…

c语言-整型在内存的存储

文章目录 前言一、整型数值在内存中的存储1.1 整型数值的表示形式1.2 二进制的表示形式1.3 整数在内存中存储 二、大端字节序存储和小端字节序存储2.1 大端字节序存储2.2 小端字节序存储2.3 练习 总结 前言 本篇文章叙述c语言中整型数据在内存中的存储方式。 一、整型数值在内…

设计模式:简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式、工厂方法模式、抽象工厂模式 1. 为什么需要工厂模式&#xff1f;2. 简单工厂模式2.1. 定义2.2. 代码实现2.3. 优点2.4. 缺点2.5. 适用场景 3. 工厂方法模式3.1. 有了简单工厂模式为什么还需要有工厂方法模式&#xff1f;3.2. 定义3.3. 代码实现3.4. 主要优点3.5.…

在较高时间周期 这些现货黄金投资法值得一用

以日线图和周线图为代表的较高时间周期&#xff0c;一直是投资者很少利用的。之所以这么说&#xff0c;不是说投资者不会在日线图上分析&#xff0c;而是很少利用日线图交易。一来持仓过夜&#xff0c;会有相关的费用产生。二来很多人做现货黄金以短线为主。其实这种较高的时间…

Windows中磁盘未知没有初始化怎么办?

当我们尝试在Windows11/10/8/7上使用外部硬盘驱动器时&#xff0c;在小概率情况下可能会遇到磁盘未知没有初始化情况&#xff0c;此时如果您进入磁盘管理工具中查看&#xff0c;将会发现您的外部硬盘驱动器显示为未知、未初始化、没有磁盘空间&#xff0c;或者在某些情况下它还…

阿里云服务器8080端口安全组开通图文教程

阿里云服务器8080端口开放在安全组中放行&#xff0c;Tomcat默认使用8080端口&#xff0c;8080端口也用于www代理服务&#xff0c;阿腾云atengyun.com以8080端口为例来详细说下阿里云服务器8080端口开启教程教程&#xff1a; 阿里云服务器8080端口开启教程 阿里云服务器8080端…

Mac 安装 Adobe AE/PS 软件报错 “Failed with error code 146“

文章目录 1. 安装 AE 软件报错2. 网上的方法2.1 删除 caps 文件夹2.2 删除 Adobe Sync 文件夹 3. 我的解决方法 1. 安装 AE 软件报错 我在尝试安装 Adobe AE 软件的时候&#xff0c;报错 “Failed with error code 146” 2. 网上的方法 2.1 删除 caps 文件夹 在 finder 的…

众和策略股市行情分析:股票分红是按持股比例来分的吗?

股票分红立足于同股同利的准则&#xff0c;按股东的持股比例来进行股利的派发分红。持股多的股东按比例所得的分红就多&#xff0c;持股少的股东按比例所得的分红就少。 另外&#xff0c;分红详细是指的股票发行公司分配股利的行为。股利包含股息和盈利&#xff0c;股息是指的…

【Web】CTFSHOW元旦水友赛部分wp

目录 ①easy_include ②easy_web ③easy_login web一共5题&#xff0c;我出了3题&#xff0c;巧的是好像师傅们也只出了3题&#xff0c;跨年拿旗还是很快乐的&#xff0c;下面直接贴出自己的wp. ①easy_include pearcmd不解释 这里主要是 &#xff0c;file://协议支持以fi…

Java中的序列化方法探索

.为什么要序列化 对象不序列化&#xff0c;能直接存储吗&#xff1f; 在 Java 中&#xff0c;序列化是将对象的状态信息转换为可以存储或传输的形式&#xff08;例如&#xff0c;转换为字节流&#xff09;的过程。在对象数据需要在网络上传输或需要在磁盘上持久化存储时&#…