首页 文章

Python中用于实数数据集的信息内容

提问于
浏览
-1

这个问题是对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来计算信息内容?

上一个问题的答案建议使用 BioPython 中的 information_content() API . 但是这些功能仅适用于字母符号 .

谢谢 .

1 回答

  • 2

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

    对于连续分布,最好使用Kozachenko-Leonenko k-最近邻估计器进行熵(K&L 1987)和相应的Kraskov,...,Grassberger(2004)估计相互信息 . 这些绕过计算概率密度函数的中间步骤,并直接从数据点到其k-最近邻居的距离估计熵 .

    Kozachenko-Leonenko估计器的基本思想是查看相邻数据点之间的平均距离(的某些函数) . 直觉是,如果距离很大,数据中的离散度很大,因此熵很大 . 实际上,不是采用最近邻距离,而是倾向于采用k-最近邻距离(其中k通常是5-20范围内的小整数),这倾向于使估计更稳健 .

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

相关问题