zoukankan      html  css  js  c++  java
  • python 3计算KL散度(KL Divergence)

    KL Divergence
    KL( Kullback–Leibler) Divergence中文译作KL散度,从信息论角度来讲,这个指标就是信息增益(Information Gain)或相对熵(Relative Entropy),用于衡量一个分布相对于另一个分布的差异性,注意,这个指标不能用作距离衡量,因为该指标不具有对称性,即两个分布PP和QQ,DKL(P|Q)DKL(P|Q)与DKL(Q|P)DKL(Q|P)计算的值一般不相等,若用作距离度量,一般需要对公式加以修改,后文讲到。
    KL Divergence的计算公式为
    对于离散分布
    DKL(P|Q)=∑iP(i)logP(i)Q(i)
    DKL(P|Q)=∑iP(i)log⁡P(i)Q(i)

    对于连续分布
    DKL(P|Q)=∫∞−∞p(x)logp(x)q(x)dx
    DKL(P|Q)=∫−∞∞p(x)log⁡p(x)q(x)dx
    程序
    利用python 3计算

    import numpy as np
    import scipy.stats

    # 随机生成两个离散型分布
    x = [np.random.randint(1, 11) for i in range(10)]
    print(x)
    print(np.sum(x))
    px = x / np.sum(x)
    print(px)
    y = [np.random.randint(1, 11) for i in range(10)]
    print(y)
    print(np.sum(y))
    py = y / np.sum(y)
    print(py)

    # 利用scipy API进行计算
    # scipy计算函数可以处理非归一化情况,因此这里使用
    # scipy.stats.entropy(x, y)或scipy.stats.entropy(px, py)均可
    KL = scipy.stats.entropy(x, y)
    print(KL)

    # 编程实现
    KL = 0.0
    for i in range(10):
    KL += px[i] * np.log(px[i] / py[i])
    # print(str(px[i]) + ' ' + str(py[i]) + ' ' + str(px[i] * np.log(px[i] / py[i])))

    print(KL)
    ---------------------
    作者:hfut_jf
    来源:CSDN
    原文:https://blog.csdn.net/hfut_jf/article/details/71403741
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    POJ
    POJ
    操作系统
    POJ
    POJ
    codeforces Educational Round 89
    codeforces Round 647(div. 2)
    codeforces Educational Round 88
    后缀自动机简单总结
    dsu on tree 简单总结
  • 原文地址:https://www.cnblogs.com/jfdwd/p/11046108.html
Copyright © 2011-2022 走看看