李宏毅打卡第七次
信息量計算,原理
首先我們要知道什麼是信息量
信息量
是一個用來描述東西包含的信息的多寡,越是確定的信息,信息量就越少。
信息熵
熵 (entropy) 這一詞最初來源於熱力學,是一種描述物體混亂程度的度量。宇宙間的物體總是趨向於熵增加的。也就是趨向於更爲混亂的成都。
接下來我們就引入信息熵,也就是常說的香農熵。
“信息熵”(information entropy)
是度量樣本集合純度的最常用的一種指標。
假設當樣本前集合D中第k類樣本所佔的比例爲(k = 1,2,3……,|y|),則D的信息熵定義爲:
證明
聯合概率,邊緣概率
本來想在課本上找到解釋的,但是好像沒有找到我需要的,我只能自己解釋一波。
我們一般知道對於某件事情的概率標記爲P(X),這意味着這是事件X發生的概率大小,而聯合概率就是對於事件X,Y它們發生的概率爲P(X,Y),特別的,如果X和Y是獨立的,那麼P(X,Y) = P(X) * P(Y)。
然後什麼是邊緣概率呢?我們由上面知道了聯合概率,那麼邊緣概率就是我們不管某一個變量算出來的概率,比如我們不關注X算出來的概率P(X,Y)就是Y的邊緣概率,而這個時候P(X,Y1) = P(X1,Y1) + P(X2,Y2) …… P(XN,Y1)(其實寫成積分形式的概率密度函數似乎更好些)
聯合熵,條件熵,條件熵公式推導
聯合熵指的是:對於服從聯合分佈P(X,Y)的一堆離散變量(X,Y),其聯合熵表示爲:
條件熵指的是:當前有聯合概率分佈爲P(X,Y),條件熵H(Y|X)指的是在X確定的條件下,隨機變量Y的不確定性,隨機變量X給定的條件下隨機變量Y的條件熵H(Y|X),定義爲X給定條件下Y的條件概率分佈的熵對X的數學期望,也就是:
對於條件熵公式推導:
互信息,互信息公式推導
互信息指的是兩個隨機變量x,y的聯合分佈乘以獨立分佈,是用來兩個隨機變量的“相關性”,公式如下:
定義式的推導如圖:
如果我們對於同一個隨機變量 x 有兩個單獨的概率分佈 P(x) 和 Q(x),我們可以使用 KL 散度來衡量這兩個分佈的差異,具體做法是P(X),Q(X)的比值取對數之後,在P(X)的概率分佈上求期望:
相對熵可以度量兩個隨機變量的“距離”
交叉熵:
前一部分是p的熵,後一部分就是交叉熵
回顧LR中的交叉熵
其中交叉熵的部分計算爲:
用來度量兩個分佈之間的差異成都。
計算給定數據集中的香農熵
import math
def get_data(name):
with open(name,"r") as f:
data = f.readlines()
length = 0
for i in range(len(data)):
data[i] = data[i].strip()
length += len(data[i])
return data,length
if __name__ == '__main__':
name = "watermelon_3a.csv"
data , length = get_data(name)
all = {}
for i in data:
for j in i:
if not j in all.keys():
all[j] = 0
else:
all[j] += 1
Ent = 0
for i in all.keys():
if all[i]/length == 0:
Ent += 0
else:
Ent += -all[i]/length * math.log(all[i]/length) / math.log(2)
print(Ent)