文章目录

  • 相关资料
  • 一、什么是概率,什么是似然
  • 二、极大似然估计 Maximum Likelihood Estimation (MLE) 的含义
    • 2.1 机器学习中的极大化似然函数
    • 2.2 极大似然估计和损失函数的关系
    • VAE最大化似然函数推导出损失函数
  • 三、代码可视化:极大似然估计
    • 3.1 似然函数 likelihood
    • 3.2 对数似然函数 log likelihood
  • 四、最大似然估计(MLE) 和最大后验概率估计(MAP)的区别

相关资料

  • 知乎:如何通俗地理解概率论中的「极大似然估计法」
  • 视频:图解极大似然估计推导与3D可视化-maximum likelihood estimation and 3D visualization
  • 源码地址:https://github.com/aespresso/a_journey_into_math_of_ml
  • 博客:从最大似然到EM算法:一致的理解方式

一、什么是概率,什么是似然

  • 似然:由实际推测参数
  • 概率:由参数推测实际

对于函数P(x∣θ)P(x|\theta)P(x∣θ),输入x表示某一个具体的数据,θ\thetaθ表示模型的参数

  • 如果θ\thetaθ是已经确定的,xxx是变量,那这个函数就叫做概率函数(probability function),它描述已知模型的情况下,不同的样本点x出现的概率是多少。
  • 如果xxx是已经确定的,θ\thetaθ是变量,那这个函数就叫做似然函数(likelihood function),它描述对于不同的模型参数θ\thetaθ,出现xxx这个样本点的概率是多少。

这种形式我们之前也见过,比如f(x,y)=xyf(x,y)=x^yf(x,y)=xy,如果x是已经确定的,如x=3,那么f(3,y)=3yf(3,y) = 3^yf(3,y)=3y是指数函数,而如果y是已经确定的,如y=2,那么f(x,2)=x2f(x,2)=x^2f(x,2)=x2是幂函数。同一个数学形式,从不同变量角度考虑,可以有不同的名字。

二、极大似然估计 Maximum Likelihood Estimation (MLE) 的含义

极大似然估计建立在这样的思想上:假设我们手里有数据X(从现实世界收集而来,可看作从一个模型中采样的过程),我们希望求出能使观测数据X出现的概率最大的模型参数θ\thetaθ,我们把这个参数θ\thetaθ作为对模型真实参数的估计。所以说极大似然估计的目的在于“找到一个产生当前观测到的数据概率最大的模型”。

通常来说,在我们不知道如何训练一个模型时,往往可以从极大似然估计的角度去推导出损失函数,有了优化目标后我们就可以训练模型了。(见下文VAE最大化似然函数推导出损失函数)

极大似然估计的依据:概率最大的事件最有可能发生,或者说真实发生的事情总是概率最大的

举个例子

我们投10次抛硬币,有6次是正。问你这个硬币的参数θ\thetaθ是多少(抛一次硬币出现正面的概率)

假设模型(硬币)的参数是θ\thetaθ(抛一次硬币出现正面的概率),则模型产生6次正面,4次正面的概率是L(θ)=P(x∣θ)=P(x1∣θ)⋯P(x10∣θ)=(106)θ6(1−θ)4L(\theta)=P(x|\theta) =P(x_1|\theta)\cdots P(x_{10}|\theta)=\left(\begin{array}{c}10 \\ 6\end{array}\right) \theta^{6}(1-\theta)^{4}L(θ)=P(x∣θ)=P(x1​∣θ)⋯P(x10​∣θ)=(106​)θ6(1−θ)4

  • 模型1:L(0.5)≈0.21L(0.5)\approx 0.21L(0.5)≈0.21
  • 模型2:L(0.6)≈0.25L(0.6)\approx 0.25L(0.6)≈0.25

由于真实发生的事情总是概率最大的,所以说我们认为模型2(θ=0.6)(\theta=0.6)(θ=0.6)比模型1(θ=0.5)(\theta=0.5)(θ=0.5)更接近真实数据分布。

那如何找到最接近于真实数据分布的模型呢?

答:找到能使L(θ)L(\theta)L(θ)最大的参数θ\thetaθ,则模型(θ)(\theta)(θ)是最接近于真实数据分布的。

2.1 机器学习中的极大化似然函数

我们可以从极大化似然函数的角度去理解机器学习问题

例如,我现在手里有一堆训练数据XXX,你给我一个模型,最能解释我现在产生的这些训练数据,也就是现在的训练集在这个模型下产生的概率应该是最大的。

  • 模型A(某种分布)产生训练集X的概率是0.9
  • 模型B(另一种分布)也能产生训练集X,但是概率只有0.3

那我当然认为模型A更接近于训练数据的真实数据分布。因为真实发生的事情总是概率最大的

你想啊,在上帝视角,数据服从真实数据分布Preal(x)P_{real}(x)Preal​(x),然后我们从现实世界中收集到了一批训练数据X,那其实就相当于从Preal(x)P_{real}(x)Preal​(x)中采样了一部分数据,得到训练数据X。那么显然概率密度函数大的样本更容易被采样出来,也就是更容易被我们收集到。那现在既然我们收集到了这些数据,说明X来自于能使它出现概率最大的模型(某种分布)

极大似然函数的具体做法:通过改变模型的参数,去找到一个能使产生这些训练数据概率最大(似然函数Pθ(x)P_\theta(x)Pθ​(x)最大)的一个模型。

2.2 极大似然估计和损失函数的关系

What is the difference between loss function and MLE?

  • A loss function is a measurement of model misfit as a function of the model parameters. Loss functions are more general than solely MLE.
  • MLE is a specific type of probability model estimation, where the loss function is the (log) likelihood. To paraphrase Matthew Drury’s comment, MLE is one way to justify loss functions for probability models.

通常来说,在我们不知道如何训练一个模型时,往往可以从极大似然估计的角度去推导出损失函数,有了优化目标后我们就可以训练模型了

You can think of MLE as a philosophical principle for writing down loss functions.
你可以认为极大似然估计函数是推导出损失函数的一种方法

  • 在分类问题中(包括二分类和多分类),可推导出交叉熵损失函数 (cross-entropy loss);
  • 在回归问题中,可以推导出最小均方差损失 (mean square error);

VAE最大化似然函数推导出损失函数

例如,在VAE中,我们通过最大化似然函数logθP(x)log_\theta P(x)logθ​P(x)的思想,以及最大化variational lower bound (ELBO)的方法,推导出来VAE的损失函数是重构损失+正则损失,这样我们就能够去训练模型了。

Connection between loss and likelihood function

  • In linear regression and logistic regression, without regularization, we can think the objective is to maximize likelihood.
  • On the other hand, we the term "loss function" is more general than likelihood.
  • For example, we can add regularization (See Regularization methods for logistic regression).
  • We can also add other constraints or use weighted loss. All of these are “add on” to likelihood.

其他:最大化似然函数与最小化损失函数的关系

三、代码可视化:极大似然估计

3.1 似然函数 likelihood

数据:Xobservation ={x1,x2,…,xN}X_{\text {observation }}=\left\{x_{1}, x_{2}, \ldots, x_{N}\right\}Xobservation ​={x1​,x2​,…,xN​}

似然函数:L(μ,σ∣X)=P(X∣μ,σ)=∏i=1NP(xi∣μ,σ)L(\mu, \sigma \mid X)=P(X \mid \mu, \sigma)=\prod_{i=1}^{N} P\left(x_{i} \mid \mu, \sigma\right)L(μ,σ∣X)=P(X∣μ,σ)=∏i=1N​P(xi​∣μ,σ)

from scipy import stats
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot# 首先定义观测的数据分布, 我们定义一个均值为0, 标准差为4的正态分布,
# 并从中随机抽200个数据点作为观测到的数值
obs_mu, obs_sigma = 0, 4
observations = np.random.normal(obs_mu, obs_sigma, 200)# 定义似然函数
def likelihood(observations, infer_mu, infer_sigma):# 定义似然函数, observations为观测到的数据点# infer_mu, infer_sigma为推断的均值和标准差product_ = 1for obs in observations:# 代入每一个数据点到我们假设的概率密度函数内, 并求它们的积product_ *= stats.norm.pdf(obs, loc=infer_mu, scale=infer_sigma)return product_# 我们定义一个参数的取值范围, 均值在(-0.5, 0.5)之间
# 标准差在(3.5, 4.5)之间
all_infer_mu = [i/10 for i in range(-5, 5)]
all_infer_sigma = [i/10 for i in range(35, 45)]# 求得每一个参数组合的似然值
mle = []
for infer_mu in all_infer_mu:temp_lis = []for infer_sigma in all_infer_sigma:temp_lis.append(likelihood(observations, infer_mu, infer_sigma))mle.append(temp_lis)# 进行似然函数的3D可视化
data = [go.Surface(x=all_infer_mu, y=all_infer_sigma, z=mle)]
layout = go.Layout(title="Likelihood", scene={"xaxis": {'title': "mean"}, "yaxis": {"title": "sigma"},"zaxis": {"title": "likelihood"}})
fig = go.Figure(data=data, layout=layout)
iplot(fig)

下图每个参数θ=(μ,σ)\theta=(\mu,\sigma)θ=(μ,σ)都对应一个模型,由于参数θ=(0.1,4.1)\theta=(0.1,4.1)θ=(0.1,4.1)对应的模型的似然函数值最大,所以我们认为这个模型是最接近与真实模型的

3.2 对数似然函数 log likelihood

对数似然函数:L(μ,σ∣X)=∑i=1Nlog⁡P(xi∣μ,σ)\mathcal{L}(\mu, \sigma \mid X)=\sum_{i=1}^{N} \log P\left(x_{i} \mid \mu, \sigma\right)L(μ,σ∣X)=∑i=1N​logP(xi​∣μ,σ)

什么要对似然函数取对数?

  • 首先原本的似然函数是很多条件概率的乘积, 我们在找极大值的时候需要求似然函数的导数, 而乘积的导数不方便计算, 取对数可以吧乘除变成加减;
  • 对似然函数取对数, 原本函数的极大值的位置没有改变;
  • 如果观测到的数据点比较多, 原始似然函数的乘积可能非常接近于0, 甚至超出计算机的储存位数限制, 这样就全变成0了, 取对数可以把接近于0的数变成很大的负数, 也就是把原本似然函数的取值范围从0到1扩展到了−∞-\infty−∞到0, 方便了计算.
from scipy import stats
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot# 首先定义观测的数据分布, 我们定义一个均值为0, 标准差为4的正态分布,
# 并从中随机抽200个数据点作为观测到的数值
obs_mu, obs_sigma = 0, 4
observations = np.random.normal(obs_mu, obs_sigma, 200)def log_likelihood(observations, infer_mu, infer_sigma):sum_ = 0for obs in observations:sum_ += stats.norm.logpdf(obs, loc=infer_mu, scale=infer_sigma)return sum_# 我们定义一个参数的取值范围, 均值在(-0.5, 0.5)之间
# 标准差在(3.5, 4.5)之间
all_infer_mu = [i/10 for i in range(-5, 5)]
all_infer_sigma = [i/10 for i in range(35, 45)]# 求得每一个参数组合的似然值
mle = []
for infer_mu in all_infer_mu:temp_lis = []for infer_sigma in all_infer_sigma:temp_lis.append(log_likelihood(observations, infer_mu, infer_sigma))mle.append(temp_lis)# 进行似然函数的3D可视化
data = [go.Surface(x=all_infer_mu, y=all_infer_sigma, z=mle)]
layout = go.Layout(title="Likelihood", scene={"xaxis": {'title': "mean"}, "yaxis": {"title": "sigma"},"zaxis": {"title": "likelihood"}})
fig = go.Figure(data=data, layout=layout)
iplot(fig)

四、最大似然估计(MLE) 和最大后验概率估计(MAP)的区别

详见我的另一篇博客:终于明白极大似然估计MLE和最大后验估计MAP的原理

透彻理解机器学习中极大似然估计MLE的原理(附3D可视化代码)相关推荐

  1. 简单理解极大似然估计MLE

    简单理解极大似然估计(MLE) 基本思想 使数据集中数据出现的概率(似然)最大 举例描述 假设某一个新闻文档数据集下有体育.财经.游戏等分类,已知体育类下的所有文档中"篮球"一词出 ...

  2. 通俗理解“极大似然估计”

    文章目录 前言 1. 似然估计 1.1 下定义 1.2 举例子 1.3 推公式 1.3.1 概率函数 1.3.2 似然函数 1.4 为什么要估计参数的似然性? 2. 极大似然估计 2.1 一般概念 2 ...

  3. Python实现极大似然估计

    概念 现实中任何随机变量的概率分布函数都是未知的. 如果假定随机变量服从某种分布(如正态分布),可以通过统计手段来计算该分布的参数,这种方法称为参数估计. 极大似然估计(Maximum Likelih ...

  4. 机器学习笔记1.矩估计、极大似然估计。

    1.矩估计 1.1矩估计思想: 矩估计是基于一种简单的"替换"思想,即用样本矩估计总体矩 1.2矩估计理论: 矩估计的理论依据就是基于大数定律的,大数定律语言化表述为:当总体的k阶 ...

  5. 通俗理解极大似然估计

    维基百科:在统计学中,最大似然估计(英语:Maximum Likelihood Estimation,简作MLE),也称极大似然估计,是用来估计一个概率模型的参数的一种方法 极大似然估计,通俗理解来说 ...

  6. 如何理解极大似然估计?

    文章目录 1 引入 2 分析 3 总结 4 补充 1 引入 首先,来看这样一个例子: 一口袋中有许多红球和白球,只知道数目比例为 1 : 3 1:3 1:3,不知道哪种多,通过实验来判断红球占的比例是 ...

  7. 机器学习笔记(VII)线性模型(III)对数几率回归和极大似然估计

    背景知识 常见回归模型 线性回归(linear regression): y=wTx+b(1) y=\mathbf{w}^T\mathbf{x}+b\tag{1} 但是有时候预测值会逼近 y \mat ...

  8. 什么是极大似然估计?

    ● 每周一言 坚持一定是有毅力,但有毅力不一定能坚持. 导语 统计学中,我们经常能听到极大似然估计,或者最大似然估计,它是一种参数估计方法.在机器学习中,逻辑回归就是基于极大似然估计来计算的损失函数. ...

  9. 一文看懂 “极大似然估计” 与 “最大后验估计” —— 极大似然估计篇

    参考: 唐宇迪<人工智能数学基础>第8章 Richard O. Duda <模式分类>第三章 白板机器学习 P2 - 频率派 vs 贝叶斯派 频率学派还是贝叶斯学派?聊一聊机器 ...

最新文章

  1. 298.2亿美元的机器人市场,为什么过得有点“惨”
  2. top与bottom、left与right的优先级
  3. linux误修改文件名恢复,如何在 Linux 中找出最近或今天被修改的文件-linux修改文件名...
  4. Qt Creator进阶使用
  5. C语言快速排序 quick sort 算法(附完整源码)
  6. Main函数中参数argc,argv说明
  7. FilterListener笔记
  8. clickhouse一键登陆
  9. perl对文件和目录进行操作
  10. .NET6之MiniAPI(十八):OpenAPI swagger
  11. Linux 会成为主流桌面操作系统吗?
  12. 2016年世界编程大赛_2016年热门编程趋势
  13. FreeBSD 11.0-发布公告
  14. java 中括号中的语句,Java中是使用大括号括起来的语句块,用于完成一个相对独立的逻辑功能,这种语句被称作()。...
  15. win11无法下载steam怎么办 Windows11无法下载steam的解决教程
  16. amqp activemq_Spring AMQP ActiveMQ教程(第1部分)
  17. Struts2 Jakarta远程执行代码测试
  18. Shiro的详细简介解释(快速搭建官网解释代码)
  19. mysql超市管理系统怎么写_vb6.0+mysql编写的小型超市管理系统
  20. Web课设——HIS系统

热门文章

  1. amos不显示路径系数原因
  2. 如何使用GoldWave合成音乐?
  3. 虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本。 模块“Upgrade”启动失败。 未能启动虚拟机。
  4. ncode2019安装教程_nCode DesignLife|ANSYS 17.0 nCode DesignLife下载 v12.0免费版 附使用教程 - 121下载站...
  5. mongoDB数据建模
  6. 不会编程也能亲手编写一个桌面数字小时钟程序,仅3步轻松实现
  7. Ubuntu 如何读取U盘内容
  8. [Android]在App中使用相机
  9. c语言 malloc 函数用法
  10. 100阶乘的约数个数