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

Python幂律拟合异常求助:结果偏差大或仅返回初始参数

幂律曲线拟合异常排查求助

用Python拟合幂律曲线时遇到以下问题:

  • 随机生成的数据测试时,拟合效果正常;但处理自有数据时,拟合结果偏差极大
  • 尝试给curve_fit提供初始参数后,拟合仅返回初始参数
  • 添加初始猜测值与参数边界后,拟合结果仍明显偏差

测试用代码(随机数据拟合正常)

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 定义幂律函数
def power_law(x, factor, exponent):
    '''
    x: x轴数据
    factor: y轴截距相关参数
    exponent: 幂次(斜率)
    '''
    return factor * x ** exponent


# 生成符合幂律分布的模拟数据
np.random.seed(0)  # 保证可复现
x_data = np.linspace(1, 10, 50)  # 示例x值
y_data = power_law(x=x_data, factor=0.2, exponent=-10) * (1 + np.random.normal(scale=0.1, size=len(x_data)))  # 加噪声的示例y值

# 拟合幂律模型
params, covariance = curve_fit(power_law, x_data, y_data)

# 提取拟合参数
fac_fit, exp_fit = params

# 绘制数据与拟合曲线
plt.figure()
plt.scatter(x_data, y_data, label='Data')
plt.plot(x_data, power_law(x_data, fac_fit, exp_fit), color='red', label='Fitted Power Law')
plt.xscale('log')
plt.yscale('log')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Fitting a Power Law to Data')
plt.legend()
plt.grid(True)
plt.show()

# 打印拟合参数
print("Fitted Parameters:")
print("factor =", fac_fit)
print("exponent =", exp_fit)

自有数据拟合代码

# 自有数据
x_data = freq_full_ordered_withM[mask]
y_data = PSD_full_ordered_withM[mask]

# 过滤非正x值及对应y值
positive_mask = x_data > 0
x_data = x_data[positive_mask]
y_data = y_data[positive_mask]

# 拟合幂律模型
params, covariance = curve_fit(power_law, x_data, y_data)

# 提取拟合参数
fac_fit, exp_fit = params

# 绘制数据与拟合曲线
plt.figure()
plt.scatter(x_data, y_data, label='Data')
plt.plot(x_data, power_law(x_data, fac_fit, exp_fit), color='red', label='Fitted Power Law')
plt.xscale('log')
plt.yscale('log')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Fitting a Power Law to Data')
plt.legend()
plt.grid(True)
plt.show()

更新尝试:添加初始参数与边界后仍偏差

initial_guess = [10**2, -2]  # 初始猜测参数(factor, exponent)
bounds = ([10**0, -5], [10**5, 0])  # 参数上下界(factor, exponent)

# 拟合幂律模型
params, covariance = curve_fit(power_law, x_data, y_data, p0=initial_guess, bounds=bounds)

拟合结果图

  • 随机数据拟合图:随机数据拟合图
  • 自有数据拟合图:自有数据拟合图
  • 添加初始参数后拟合图:添加初始参数后拟合图

恳请各位技术同行协助排查问题原因并提供解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:50:56