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

为何scipy的weibull_min返回的拟合参数存在微小偏差?

Weibull分布拟合微小偏差的原因分析

我先通过已知参数生成Weibull分布模拟数据,再用Weibull函数拟合数据尝试还原参数(后续计划用于真实数据拟合),但在基础测试中发现拟合参数和已知参数存在微小偏差。

测试代码

from scipy.stats import weibull_min
from scipy.optimize import curve_fit
import numpy as np  # 注:原代码遗漏numpy导入,此处补充

def weibull(x, shape, loc, scale):
    return weibull_min.pdf(x, shape, loc, scale)

# 生成3秒时间序列
t_start = 0
t_end = 3
samples = t_end * 100  # 每秒模拟100个样本

t = np.linspace(t_start, t_end, samples)

# 设置Weibull分布的已知参数
kn_shape, kn_loc, kn_scale = 1.5, 0, 1 

# 基于已知参数生成模拟数据
sim_data = weibull(t, kn_shape, kn_loc, kn_scale)

# 拟合模拟数据并返回参数
params, _ = curve_fit(weibull, t, sim_data)  # 注:原代码中sim_data_noisy未定义,此处修正为sim_data

拟合结果

shape = 1.4999999989589334, loc = 4.399587587206362e-10, scale = 0.9999999997072269

偏差原因

  • 浮点数精度限制:Python采用64位双精度浮点数存储数值,有效位数约15-17位。在生成模拟数据、计算PDF值、拟合优化的每一步中,都会产生微小舍入误差,累积后导致拟合结果与真实参数出现极细微偏差。
  • 优化算法的收敛特性:curve_fit默认使用的Levenberg-Marquardt算法通过迭代最小化残差寻找最优参数,当残差变化低于预设收敛阈值时就会停止迭代,不会无限逼近真实参数,因此会留下微小误差空间。
  • 离散样本的固有误差:模拟数据是基于np.linspace生成的离散样本点,而非连续的Weibull分布曲线,离散化过程本身会引入极微小的误差,影响拟合结果的绝对精准度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:25:56