gpt4 book ai didi

python - 如何正确地将数据拟合到 Python 中的幂律?

转载 作者:行者123 更新时间:2023-12-04 13:40:55 24 4
gpt4 key购买 nike

我正在考虑 number of occurrence of unique words in the Moby Dick novel并使用 powerlaw python package使单词的频率符合幂律。
我不知道为什么我不能概括 Clauset 等人以前工作的结果。因为 p 值和 KS 分数都是“坏的”。
这个想法是将独特单词的频率拟合为幂律。然而,Kolmogorov-Smirnov 检验通过 scipy.stats.kstest 计算出的拟合优度。看起来很可怕。
我有以下函数来使数据符合幂律:

import numpy as np
import powerlaw
import scipy
from scipy import stats

def fit_x(x):
fit = powerlaw.Fit(x, discrete=True)
alpha = fit.power_law.alpha
xmin = fit.power_law.xmin
print('powerlaw', scipy.stats.kstest(x, "powerlaw", args=(alpha, xmin), N=len(x)))
print('lognorm', scipy.stats.kstest(x, "lognorm", args=(np.mean(x), np.std(x)), N=len(x)))

下载 Herman Melville 的小说 Moby Dick 中独特单词的频率(根据 Aaron Clauset 等人的说法,应该遵循幂律):
wget http://tuvalu.santafe.edu/~aaronc/powerlaws/data/words.txt
python 脚本:
x =  np.loadtxt('./words.txt')
fit_x(x)
结果:
('powerlaw', KstestResult(statistic=0.862264651286131, pvalue=0.0))
('log norm', KstestResult(statistic=0.9910368602492707, pvalue=0.0))

当我比较预期结果并按照此操作时 R tutorial在同一个 Moby Dick 数据集上,我得到了一个不错的 p 值和 KS 测试值:
library("poweRlaw")
data("moby", package="poweRlaw")
m_pl = displ$new(moby)
est = estimate_xmin(m_pl)
m_pl$setXmin(est)
bs_p = bootstrap_p(m_pl)
bs_p$p
## [1] 0.6738

在计算 KS 测试值并通过 powerlaw 对拟合进行后处理时,我遗漏了什么? python库? PDF 和 CDF 对我来说看起来不错,但 KS 测试看起来有问题。
enter image description here

最佳答案

我觉得你应该注意数据是连续的还是离散的,然后选择合适的测试方法;另外,前面说了,数据的大小会对结果有一定的影响,希望对你有帮助

关于python - 如何正确地将数据拟合到 Python 中的幂律?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com