gpt4 book ai didi

python - 泰尔不平等指数在python中的实现

转载 作者:行者123 更新时间:2023-11-28 18:45:54 25 4
gpt4 key购买 nike

我正在尝试在 Python 中实现 Theil 指数 ( http://en.wikipedia.org/wiki/Theil_index ) 来衡量列表中收入的不平等。

公式基本上是香农熵,所以处理的是对数。我的问题是我的列表中有一些收入为 0,而 log(0) 使我的公式不满意。我相信向 0 添加一个微小的 float 不会像 log(tinyFloat) = -inf 那样工作,这会弄乱我的索引。

[编辑]这是一个片段(取自另一个更清晰且免费提供的实现)

    def error_if_not_in_range01(value):
if (value <= 0) or (value > 1):
raise Exception, \
str(value) + ' is not in [0,1)!'
def H(x)
n = len(x)
entropy = 0.0
sum = 0.0
for x_i in x: # work on all x[i]
print x_i
error_if_not_in_range01(x_i)
sum += x_i
group_negentropy = x_i*log(x_i)
entropy += group_negentropy
error_if_not_1(sum)
return -entropy
def T(x):
print x
n = len(x)
maximum_entropy = log(n)
actual_entropy = H(x)
redundancy = maximum_entropy - actual_entropy
inequality = 1 - exp(-redundancy)
return redundancy,inequality

有什么办法可以解决这个问题吗?

最佳答案

如果我对您的理解正确,您尝试实现的公式如下:

enter image description here

在这种情况下,您的问题是在 Xi = 0 时计算 Xi/mean(X) 的自然对数。

但是,由于必须先乘以 Xi/mean(X),如果 Xi == 0 ln(Xi/mean (X)) 无关紧要,因为它将乘以零。您可以将该条目的公式值视为零,并完全跳过计算对数。

如果您直接实现香农公式,同样成立:

enter image description here

在第一种和第二种形式中,如果 Pi == 0 则不需要计算对数,因为无论它是什么值,它都将乘以零。

更新:

鉴于您引用的代码,您可以将 x_i*log(x_i) 替换为如下函数:

def Group_negentropy(x_i):
if x_i == 0:
return 0
else:
return x_i*log(x_i)

def H(x)
n = len(x)
entropy = 0.0
sum = 0.0
for x_i in x: # work on all x[i]
print x_i
error_if_not_in_range01(x_i)
sum += x_i
group_negentropy = Group_negentropy(x_i)
entropy += group_negentropy
error_if_not_1(sum)
return -entropy

关于python - 泰尔不平等指数在python中的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20279458/

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