You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python scipy.optimize的极大似然估计(MLE)运行失败如何解决

问题修复方案

核心错误原因

  • 未对参数增加合法性约束,优化过程中形状参数Kasi、尺度参数Beta出现负值,触发对数输入为负、负数非整数次幂等非法运算,最终返回nan
  • 目标函数公式书写错误,不符合超阈值样本服从的广义帕累托分布(GPD)对数似然表达式
  • 未指定支持边界约束的优化求解器

修正后可运行代码

from scipy.optimize import minimize
import pandas as pd
import numpy as np

# 读取本地损失数据
My_DataFrame = pd.read_excel("<FILE_PATH_IN_YOUR_MACHINE>\\Losses.xlsx")
loss = My_DataFrame["Loss"].values
# 提取超过阈值160的超额损失样本
excess_loss = loss[loss > 160] - 160

def negative_ll(x):
    k, b = x
    # 拦截非法参数,避免无效运算
    if k <= 1e-8 or b <= 1e-8:
        return 1e12
    # 广义帕累托分布对数似然计算
    log_likelihood = np.sum(
        np.log(1/b) + (-1/k - 1) * np.log(1 + k * excess_loss / b)
    )
    # 最大化对数似然转换为最小化负对数似然
    return -log_likelihood

# 定义参数边界:Kasi>0,Beta>0
param_bounds = [(1e-8, None), (1e-8, None)]
# 选择支持边界约束的L-BFGS-B求解器进行优化
mle_result = minimize(
    fun=negative_ll,
    x0=[0.7, 20],
    bounds=param_bounds,
    method='L-BFGS-B'
)
print(mle_result)

结果说明

代码运行后会输出收敛成功的优化结果,mle_result.x中第一个值为Kasi的最优估计值,第二个值为Beta的最优估计值。

内容的提问来源于stack exchange,提问作者Shayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:48:02