Entropy 的基本精神介紹

  • 數學家發明了一個公式,用來衡量某一群的資料(分佈)所帶資訊量(亂度)
  • 相信大家看了上句應該還是很抽像,舉例來說如果我們丟躑兩個特製的銅板(A 銅板及B 銅板),如果其中一個銅板因為物理構造的原因怎麼出現都是正面,而另一個銅板兩面出現的機率接近 50%,用直覺的想法如果我們要預測 A 銅板的丟躑預測結果所花的心思一定小於 B 銅板,更進一步的說法就是 A 銅板丟躑結果分佈所帶的資訊量(entropy)小於 B 銅板

Entropy 的計算程式範例

底下示範計算某個字串的 entropy


In [7]:
import math
import numpy as np


def entropy(ss = 'gargleblaster'):

    ssit = {i for i in ss}

    n = len(ss)*1.
    entropy = 0

    for c in ssit:

        p_x = ss.count(c)*1./n

        if p_x > 0:

            entropy += -(p_x)*math.log(p_x,2)

#         print("{} {} {}".format(c,ss.count(c),p_x))
#     print(ssit)
    return entropy

In [8]:
# 丟銅板為例
print(entropy("111111"))
print(entropy("111001"))


0.0
0.9182958340544896

In [9]:
# 也可以計算任何字串
print(entropy("lkejrlejrlewjrlewr"))


2.4613201402110088

Binary Cross Entropy

  • 這一篇文章有一個很直觀的介紹 : http://shuokay.com/2017/06/23/cross-entropy/
  • Y is real data's label(only two labes. e.q. yes or no )
  • A is your model prediction result , this result is a probability that your model say this test data's label is "yes".
  • 摘錄這篇文章的重要片段如下

In [10]:
Y = np.array([1,1,0,0,1])
A = np.array([0.8, 0.7, 0.2, 0.1, 0.9])
A2 = np.array([0.6, 0.6, 0.2, 0.1, 0.3])

In [12]:
import numpy as np

def cross_entropy(Y, A):
    m = len(A)
    cost = -(1.0 / m) * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))
    return cost

In [14]:
print(cross_entropy(Y,A))
print(cross_entropy(Y,A2))


0.202736615577
0.510825623766

In [ ]: