[(机器学习)概率统计]极大似然估计MLE原理+python实现

在统计学中,最大似然估计,也称为最大概似估计,是用来估计一个概率模型的参数的一种方法。

预备知识

概率密度函数

简单讲,就是一个概率分布在某一取值下对应的概率值。用维基百科的话来讲就是【在数学中,连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。】以大家最为常见的正态分布函数为例~其概率分布函数为:

f(x|u,σ2)=12πσ2exp((xu)22σ2)

标准正态分布为: x(0,1)
函数如图:
这里写图片描述
这里写图片描述

似然函数

在数理统计学中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。“似然性”与“或然性”或“概率”意思相近,都是指某种事件发生的可能性,但是在统计学中,“似然性”和“或然性”或“概率”又有明确的区分。概率用于在已知一些参数的情况下,预测接下来的观测所得到的结果,而似然性则是用于在已知某些观测所得到的结果时,对有关事物的性质的参数进行估计。
例如在已知某个参数 θ 的情况下事件A会发生的概率写作:

p(A|θ)=p(A,θ)p(θ)

根据贝叶斯定理:
p(θ|A)=p(A|θ)p(θ)p(A)

因此,我们可以反过来构造表示似然性的方法:已知有事件A发生,运用似然函数 L(θ|A) 我们估计参数B的可能性。

极大似然估计原理

根据频率主义学派认为已知一个分布,虽然不知道分布的具体参数,但是却客观上存在固定的参数值。因此可以通过一些准则来确定参数值。这里介绍的极大似然估计就是一种根据采样来估计概率分布参数的经典方法。

最大似然估计会寻找关于 θ 的最可能的值(即,在所有可能的 θ 取值中,寻找一个值使这个采样的“可能性”最大化,相当于是价用概率密度函数参数去拟合采样的结果)。
现在我们的工作就是最大化似然函数:

p(θ|A)=p(A|θ)p(θ)p(A)

根据大数定律,当训练集包含充足的独立同分布 样本的时候, P(A) 可以通过各类和样本出现的频率来进行估计。在这里,已知样本之后,我们就可以估算出 P(A) 的值,并将其当做固定值处理。
现在我们需要根据所有可能 θ 的取值,选取一个让 p(θ|A) 最大化的值。这里还是以正态分布为例。为了简化运算,我们对似然函数取对数。最大化一个似然函数同最大化它的自然对数是等价的。因为自然对数log是一个连续且在似然函数的值域内严格递增的上凸函数。

这里写图片描述

分别对 θu 求导:
这里写图片描述

编程验证

下面通过python 3.5 + numpy 验证上述的证明过程,还是以正态分布为例。

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
mu = 30  # mean of distribution
sigma = 2  # standard deviation of distribution
x = mu + sigma * np.random.randn(10000)


def mle(x):
    """
    极大似然估计
    :param x:
    :return:
    """
    u = np.mean(x)
    return u, np.sqrt(np.dot(x - u, (x - u).T) / x.shape[0])


print(mle(x))
num_bins = 100
plt.hist(x, num_bins)
plt.show()

这里写图片描述

  • 15
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
极大似然估计(Maximum Likelihood Estimation,简称MLE)是一种常用的统计方法,用于估计参数的值。在Python中,我们可以使用以下步骤来实现极大似然估计: 1. 定义概率分布函数:首先,需要定义一个概率分布函数,例如正态分布、泊松分布等。这个函数将接受参数和待估计的数据,并计算出给定参数下观测数据出现的概率。 2. 定义似然函数:接下来,定义一个似然函数,该函数将接受参数和观测数据,并计算出给定参数下观测数据的似然似然函数的计算通常是通过对每个观测数据点的概率求乘积得到的。 3. 最大化似然函数:使用优化算法(如梯度下降、牛顿法等),找到使似然函数最大化的参数值,即极大似然估计值。在Python中,可以使用`scipy.optimize`模块中的函数实现参数的最大化。 以下是一个简单的示例,演示如何使用Python实现正态分布的极大似然估计: ```python import numpy as np from scipy.stats import norm from scipy.optimize import minimize # 生成一组观测数据 data = np.array([1.2, 2.5, 0.8, 1.5, 1.9]) # 定义正态分布的概率密度函数 def normal_pdf(x, mu, sigma): return norm.pdf(x, loc=mu, scale=sigma) # 定义似然函数 def likelihood(params): mu, sigma = params pdf_vals = normal_pdf(data, mu, sigma) return -np.log(pdf_vals).sum() # 使用最小化算法最大化似然函数 initial_guess = [0, 1] result = minimize(likelihood, initial_guess) # 输出估计出的参数值 estimated_mu, estimated_sigma = result.x print("Estimated mu:", estimated_mu) print("Estimated sigma:", estimated_sigma) ``` 在上述示例中,首先使用`numpy`生成了一组观测数据`data`。然后,定义了正态分布的概率密度函数`normal_pdf`和似然函数`likelihood`。最后,使用`scipy.optimize.minimize`函数找到使似然函数最大化的参数值。输出结果为估计出的均值(`mu`)和标准差(`sigma`)。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值