【问题标题】:Fit a power law to empirical data in Python将幂律拟合到 Python 中的经验数据
【发布时间】:2013-08-11 00:39:35
【问题描述】:

我正在尝试使用powerlaw 模块对经验数据拟合幂律。我创建了以下遵循指数 2 的幂律分布的数据:

x = range(1,1000)
y = []

for i in x:
    y.append(i**(-2))

我希望拟合的幂律的指数为 2。但是得到的指数与理论值有很大的偏差:

    fitted_pl = powerlaw.Fit(y)

    fitted_pl.alpha
    Out[115]: 1.4017584065981563

您能否告知为什么会发生这种情况,或者指出我在这里做错了什么?

感谢您的友好回答!

【问题讨论】:

  • 当你写y.append(x**(-2))时,我想你的意思是y.append(i**(-2))
  • @Brionius 感谢您指出这一点,已更正。
  • 您是否会混淆线 y(x) = k x^(-a) 的回归与拟合从 概率分布 p(x) ~ (a-1) x^(-a) 得出的值的指数? [k->a 更改是有意的。]powerlaw 模块解决了第二个问题。
  • @DSM,你说得对!我混淆了这两个非常不同的任务。非常感谢您指出这一点!

标签: python power-law


【解决方案1】:

正如@DSM 指出的那样,幂律模块处理将指数拟合到从幂律分布绘制/生成的值,而不是拟合回归。为了帮助可能有类似困惑的人,以下是验证指数拟合的方法:

## use a proper power law random number generator (or code your own) 
from networkx.utils import powerlaw_sequence
pl_sequence = powerlaw_sequence(1000,exponent=2.5)

fitted_pl = powerlaw.Fit(pl_sequence)

fitted_pl.alpha
Out[73]: 2.4709012785346314  ##close enough

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 2015-11-23
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多