信息熵和条件信息熵python实现

H(X)=xXp(x)logp(x)
H(X|Y)=yYp(y)H(X|Y=y)

def H(X):
    """
    计算信息熵
    H(X) = -sigma p(x)log p(x)
    :param X:
    :return:
    """
    x_values = {}
    for x in X:
        x_values[x] = x_values.get(x, 0) + 1
    length = len(x_values)
    ans = 0
    for x in X:
        p = x_values.get(x) / length
        ans += p * math.log2(p)

    return 0 - ans
def condition_H(X, Y):
    """
    条件互信息计算
    H(X|Y) = Sigma_Y p(y)*H(X|Y=y)
    :param X:
    :param Y:
    :return:
    """
    y_value = set(Y)
    y_condition = {}
    for v in y_value:
        y_condition[v] = []
    for x, y in zip(X, Y):
        y_condition[y].append(x)
    y_counts = {}
    for y in Y:
        y_counts[y] = y_counts.get(y, 0) + 1
    ans = 0
    for k in y_counts:
        ans += k * H(y_condition[k])
    return ans / len(y_counts)
posted @   TSTKSnhx  阅读(836)  评论(1编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
历史上的今天:
2020-06-04 算法(一)排序算法的归纳(python)
点击右上角即可分享
微信分享提示