繁体   English   中英

在python中实现Theil不等式索引

[英]Implementation of Theil inequality index in python

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

该公式基本上是香农的熵,所以它处理日志。 我的问题是我的列表中有一些收入为0,log(0)使我的公式不高兴。 我认为将一个小浮点数添加到0将无法用作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

有没有办法解决这个问题?

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

在此输入图像描述

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

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

在您直接实施香农公式的情况下,同样适用:

在此输入图像描述

在第一种和第二种形式中,如果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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM