熵通常被認(rèn)為描述一個系統(tǒng)或者分布的不確定性,熵越大,系統(tǒng)越混亂,不確定性越大。
機(jī)器學(xué)習(xí)與數(shù)據(jù)挖掘的算法中大量的應(yīng)用了熵來評價例如結(jié)果的多樣性、數(shù)據(jù)分布的純凈度等。
比如在決策樹模型中,使用信息熵來確定分割節(jié)點(diǎn),即為了使每次劃分后數(shù)據(jù)分布更純凈。
在推薦多樣性模塊中,應(yīng)用貪心法,每次計算加入一個商品后整體推薦商品list的熵,熵越大則推薦多樣性越好。
熵的定義:
一個隨機(jī)變量的概率分布為:
P(X=xi) = pi, i=1,2,3,..,n,即該隨機(jī)變量可以取n個離散的值,如拋硬幣為正反面兩個值,P(X=正)=0.5, P(X=反) = 0.5
熵的定義為

對于二分類問題,熵的概率曲線為:

在伯努利分布中,(1,0) 這種分布熵為0(不確定性最?。?0.5,0.5)這種分布熵最大
條件熵:H(Y|X)
定義為X給定條件下Y的條件概率分布的熵對X的數(shù)學(xué)期望:

ex1:
小A考試通過與不通過概率的分布為(0.5,0.5),則熵為1 (值為觀察上圖,沒有自己計算)。
加入條件,小A考試前復(fù)習(xí)與不復(fù)習(xí)的概率為(0.5,0.5),在復(fù)習(xí)情況下考試通過的概率分布為(0.8,0.2),在不復(fù)習(xí)的情況下考試通過的概率分布為(0.2,0.8),則條件熵為(0.5 * 0.7 + 0.5 * 0.7) = 0.7注:H([0.8,0.2])~= 0.7
信息增益定義:
信息增益的定義為:熵-條件熵 ,比如ex1中,信息增益為0.3。
決策樹根據(jù)信息增益選擇分割特征就是通過信息增益。 (決策樹ID3算法)即在加入了某特征的約束后,對于label的分布的熵的前后變化即為該特征的信息增益,選擇信息增益最大的節(jié)點(diǎn)作為決策樹該次分割的節(jié)點(diǎn)。
信息增益比
信息增益傾向于選擇離散取值多的特征,因此引入信息增益比的概念來平衡
信息增益比=信息增益/數(shù)據(jù)集關(guān)于條件特征的值的熵H {D(A)}
數(shù)據(jù)集關(guān)于條件特征的值,即將數(shù)據(jù)集對特征A(而不是在特征A的條件下對label的類別數(shù)計算熵)的熵,顯然,特征A的類別數(shù)越多,熵就越大,因此作為分母來平衡特征選擇(決策樹C4.5算法)
相對熵:
相對熵,又稱KL散度( Kullback–Leibler divergence),是描述兩個概率分布P和Q差異的一種方法。它是非對稱的,這意味著D(P||Q) ≠ D(Q||P)。

p(x)與q(x)是兩個概率分布,則p對q的相對熵計算如上式。
看公式感覺十分復(fù)雜,實(shí)際在計算中非常簡單。
ex2:
對于兩個二分類的概率分布,分布A=(0.5,0.5),分布B=(0.25,0.75)
則相對熵D(A||B) = 0.5 * log(0.5/0.25) + 0.5 * log(0.5/0.75) =0.14
推薦中的應(yīng)用,多樣性模塊:
在推薦多樣性模塊(推薦第三輪排序中),使用貪心算法,每次在排序候選列表(一般設(shè)為長度為N的一個窗口)選出一個另前后分布相對熵變化最大的商品進(jìn)來:
在已有推薦結(jié)果的列表里,選擇了8個商品,目前已選擇商品的分布為 (蘋果,帽子,手機(jī),圍巾)(1,2,3,2)=> (0.125, 0.25, 0.375, 0.25)
case1:
在候選的列表里有(蘋果,帽子,手機(jī)),需要添加哪一個?
添加蘋果的話,分布變?yōu)?2,2,3,2) = (2/9,2/9,1/3,2/9) ,
D(蘋果)= 2/9 * log((2/9) / (1/8)) + 2/9 * log(2/9/ (1/4)) + 1/3* log(1/3/(3/8)) + 2/9 * log(2/9/(2/8)) = 0.03624967113471546
添加手機(jī)的話,分布變?yōu)?1,2,4,2) = (1/9,2/9,4/9,2/9) D(手機(jī)) = 0.0100756632111
可見要添加 蘋果。
更一般的,在已選擇商品列表里,哪個已經(jīng)出現(xiàn)的次數(shù)最小,選擇哪一個,則一定相對熵最大。
# 計算多樣性模塊中的相對熵
import math
def KL_diver(p1,p2):
rela_entropy = 0
for i in range(len(p1)):
rela_entropy += p2[i] * math.log(p2[i] * 1.0 / p1[i])
print (rela_entropy)
p1 = [0.125,0.25,0.375,0.25]
p2 = [2.0/9,2.0/9,3.0/9,2.0/9]
KL_diver(p1,p2)
>> 0.03624967113471546
case2:
在候選的列表里有(蘋果,帽子,柚子),需要添加哪一個?
答案是柚子,在相對熵里面,如果一個元素本身沒有出現(xiàn)在原分布里,則添加進(jìn)已選列表分布,相對熵一定最大。
也可以在原分布中賦予沒有出現(xiàn)的柚子一個極小的值如0.001,這樣再計算相對熵時候log((1/9)/0.001)能得到一個很大的值,自然就能選出之前不存在的柚子。
TD-IDF算法就可以理解為相對熵的應(yīng)用:詞頻在整個語料庫的分布與詞頻在具體文檔中分布之間的差異性。
交叉熵:
對于真實(shí)分布與非真實(shí)分布,計算公式為


假設(shè)對于一條樣本,做二分類,真實(shí)分布為(1,0) = (y,1-y)模型預(yù)測為正類的打分為0.7 =p(sigmoid),則模型預(yù)測分布為(0.7,0.3) = (p,1-p),
則交叉熵為1 * log2(1/0.7) + 0 * log2(1/0.3) = 0.356
1 * log2(1/0.7) + 0 * log2(1/0.3) = 1*log2(1) - 1* log2(0.7) + 0 * log2(1) - 0 * log2(0.3) = - (1 * log2(0.7) + 0 * log2(0.3))
更一般的形式
y * log2(1/p) + (1-y) * log2(1/(1-p)) = y* log2(1) - y* log2(p) + (1-y) * log2(1) - (1-y) * log2(1-p)
= - (y * log2(p) + (1-y) * log2(1-p))
觀察邏輯回歸的對數(shù)似然函數(shù):

括號內(nèi)部對于單條樣本的似然函數(shù)的值即為對于該條樣本,真實(shí)分布與非真實(shí)分布的交叉熵的負(fù)數(shù)
因此:最大化似然函數(shù)=減少交叉熵(交叉熵越小,與真實(shí)分布越接近,交叉熵最小為真實(shí)分布的熵,對于二分類,真實(shí)分布(1,0)的熵為0)
在邏輯回歸里的說法:
最大化對數(shù)似然函數(shù) = 最小化損失函數(shù)
通常將上式中的對數(shù)似然函數(shù)取一個符號,作為損失函數(shù),即如下式子:

可見,該式子與上面標(biāo)紅的交叉熵計算公式是一致的。
因此,LR的損失函數(shù)又叫做大名鼎鼎的交叉熵?fù)p失函數(shù)。
總結(jié):
文本總結(jié)了機(jī)器學(xué)習(xí)的各種熵,從決策樹,到推薦多樣性,再到LR的損失函數(shù),是機(jī)器學(xué)習(xí)應(yīng)用中必備的基礎(chǔ)實(shí)用知識。