【问题标题】:Information content in Python for real number datasetPython中实数数据集的信息内容
【发布时间】:2017-04-16 12:45:34
【问题描述】:

这个问题是对previous question的补充。

我需要从两个 Python 列表中计算信息内容。这些列表包含实数。我知道我可以使用以下公式从列表的直方图计算概率。

sum_ij p(x_i,y_j) log_2 (p(x_i,y_j)/(p(x_i)p(y_j))  / - sum_i p(y_i) log_2 p(y_i)

是否有任何内置的 Python API 来计算信息内容?

上一个问题的答案建议使用来自BioPythoninformation_content() API。但该函数仅适用于字母符号。

谢谢。

【问题讨论】:

  • 你的价值观是离散的还是连续的?
  • @Paul 他们是连续的。

标签: python numpy scipy entropy information-theory


【解决方案1】:

对于离散分布,您可以使用前面提到的 biopython 或 scikit-learn 的sklearn.metrics.mutual_info_score。但是,两者都使用您引用的公式(用于符号数据)计算“符号”数据之间的互信息。无论哪种情况,您都忽略了数据的值具有固有顺序。

对于连续分布,最好使用 Kozachenko-Leonenko k-nearest neighbor estimator for entropy (K & L 1987) 和相应的 Kraskov, ..., Grassberger (2004) 估计互信息。这些绕过了计算概率密度函数的中间步骤,直接从数据点到它们的k最近邻点的距离来估计熵。

Kozachenko-Leonenko 估计器的基本思想是查看相邻数据点之间的平均距离(某个函数)。直觉是,如果该距离很大,则数据的分散性很大,因此熵也很大。在实践中,人们倾向于采用 k 近邻距离(其中 k 通常是 5-20 范围内的一个小整数),而不是采用最近邻距离,这往往会使估计更加稳健。

我的 github 上都有这两个实现:https://github.com/paulbrodersen/entropy_estimators

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    相关资源
    最近更新 更多