python - Numpy lomax 均值函数返回 "inf"而不是值

标签 python python-3.x numpy scipy

已关注 this tutorial ,我创建了以下 churn.py 文件:

import numpy as np
import scipy as sp
import scipy.stats as stats

#duration of alive subscriptions
censored = np.array([419,513, ... ,316,14])
#duration of completed subscriptions
uncensored = np.array([389,123,340, ... ,56,31])

#Log likelihoods for censored data
def log_likelihood_lomax(args):
    shape, scale = args
    val = stats.lomax.logpdf(uncensored, shape, loc=0, scale=scale).sum() + stats.lomax.logsf(censored, shape, loc=0, scale=scale).sum()
    return -val

res_lomax = sp.optimize.minimize(log_likelihood_lomax,   [1, 1], bounds=((0.001, 1000000), (0.001, 1000000)))

print("lomax shape", res_lomax.x[0], ", scale=", res_lomax.x[1])
print("lomax mean", stats.lomax.mean(res_lomax.x[0], scale=res_lomax.x[1]))
print("lomax median", stats.lomax.median(res_lomax.x[0], scale=res_lomax.x[1]))

注意:审查未经审查中的... code> 数组放在这里是出于保密目的。在实际脚本中,我改为包含实际值。

当我使用 python3 churn.py 运行此脚本时,我得到以下结果:

lomax shape 0.36948878639375643 , scale= 1440.4384891101636
lomax mean inf
lomax median 7961.447172364986

我知道返回的中位数值不正确。

但最重要的是,我不明白为什么洛马尔平均值返回inf

我的脚本有什么问题吗?

最佳答案

您的结果显示

lomax shape 0.36948878639375643 

也就是说,使用 scipy 的表示法,形状参数 c 为 0.36948878639375643(在 wikipedia article 中,c 为 α)。 对于 c ≤ 1,分布的均值无限大(即定义均值的积分发散)。

您问“我的脚本有什么问题吗?”我建议进行一项重要更改:在调用 minimize 后,检查 res_lomax.在使用 res_lomax.x 中的值之前,success 为 True。像这样的事情:

res_lomax = sp.optimize.minimize(log_likelihood_lomax, [1, 1], bounds=((0.001, 1000000), (0.001, 1000000)))
if res_lomax.success:
    print("lomax shape", res_lomax.x[0], ", scale=", res_lomax.x[1])
    print("lomax mean", stats.lomax.mean(res_lomax.x[0], scale=res_lomax.x[1]))
    print("lomax median", stats.lomax.median(res_lomax.x[0], scale=res_lomax.x[1]))
else:
    print("minimization failed:", res_lomax.message)

关于python - Numpy lomax 均值函数返回 "inf"而不是值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53732916/

相关文章:

python - Django Haystack Elasticsearch : order by position of matched term

python - Flask-SqlAlchemy 或 SqlAlchemy 过滤器

python - pandas 按 2 列中的值进行过滤,返回整行

arrays - numpy ndarray 形状有什么作用?

python - 如何强制 os.system() 使用 bash 而不是 shell

python - mashape python unirest库

python - 我需要添加或重新排列什么才能有另一个小数位?

python - 在 python 2.7 中将字符串编码为 un​​icode 时出错?

python - 将 2D numpy.ndarray 转换为嵌套字典

python - 如何使用 TensorFlow 连接两个具有不同形状的张量?