參考https://blog.csdn.net/haolexiao/article/details/70142571
信息量
信息量表示一個信息所需要的編碼長度。而一個信息的編碼長度跟其出現的概率呈負相關,因為一個短編碼的代價也是巨大的,因為會放棄所有以其為前綴的編碼方式,比如字母”a”用單一個0作為編碼的話,那么為了避免歧義,就不能有其他任何0開頭的編碼詞了。所以一個詞出現的越頻繁,則其編碼方式也就越短,同時付出的代價也大。
I = log(\frac{1}{p(x)}) = -log(p(x))
信息熵
信息熵代表一個分布的信息量,即信息量的均值,或者編碼的平均長度
H(p) = \sum_x p(x)\log\left(\frac{1}{p(x)}\right) = -\sum_x p(x)\log\left(p(x)\right)
交叉熵 cross-entropy
交叉熵本質上可以看成,用一個猜測的分布的編碼方式去編碼其真實的分布,得到的平均編碼長度或者信息量
H_p(q) = \sum_x p(x)\log\left(\frac{1}{q(x)}\right)
其中p(x)為真實分布,q(x)為猜測的分布
交叉熵 cross-entropy在機器學習領域的作用
交叉熵cross-entropy在機器學習領域中經常作為最后的損失函數使用
為什么要用cross-entropy呢,他本質上相當于衡量兩個編碼方式之間的差值,因為只有當猜測的分布越接近于真實分布,則其值越小(真實分布最小)。
比如根據自己模型得到的A的概率是80%,得到B的概率是20%,真實的分布是應該得到A,則意味著得到A的概率是100%,所以
L = -\sum_iy_ilog(p(x_i))+(1-y_i)log(1-p(x_i))
在LR中用cross-entropy比平方誤差方法好在:
- 在LR中,如果用平方損失函數,則損失函數是一個非凸的,而用cross-entropy的話就是一個凸函數
- 用cross-entropy做LR求導的話,得到的導數公式如下
\frac{\partial L}{\partial \theta_j} = -\sum_i(y_i-p(x_i))x_{ij}
而用平方損失函數,其求導結果為
\frac{\partial L}{\partial \theta_j} = -\sum_i(y_i-p(x_i))p'(x_i)
平方損失函數的導數中會出現p^{'}(x_i),而sigmoid函數的導數會出現梯度消失的問題,因此用cross-entropy作為損失函數
KL散度
KL散度/KL距離是衡量兩個分布的距離,KL距離一般用D(p||q)或者D_p(q)稱之為p對q的相對熵
D_p(q) = H_p(q) - H(p) = \sum_x p(x)\log\left(\frac{p(x)}{q(x)}\right)
KL散度與cross-entropy的關系
D_p(q) = H_p(q) - H(p)
非負性證明
參考https://blog.csdn.net/yujianmin1990/article/details/71213601
直接證明D_p(q)\geq0較為麻煩,可以證明-D_p(q)\leq0。
借助\ln x \leq x-1,其中x>0,當且僅當x=1時取得最值
聯合信息熵和條件信息熵
下面幾條我們要說的是聯合分布中(即同一個分布中)兩個變量相互影響的關系,上面說的KL和cross-entropy是兩個不同分布之間的距離度量
聯合信息熵:
H(X,Y) = \sum_{x,y} p(x,y) \log\left(\frac{1}{p(x,y)}\right)
條件信息熵:
H(X|Y) = \sum_y p(y) \sum_x p(x|y) \log\left(\frac{1}{p(x|y)}\right)= \sum_{x,y} p(x,y) \log\left(\frac{1}{p(x|y)}\right)
關系為:
H(Y|X) = H(X,Y) - H(X)
互信息
互信息就是一個聯合分布中的兩個信息的糾纏程度/或者叫相互影響那部分的信息量
I(X,Y)= \sum_{x \in X} \sum_{y \in Y} p(x, y) log_2 \frac{1}{\frac{p(x)p(y)}{p(x,y)}}
I(X,Y) = H(X) + H(Y) - H(X,Y)
I(X,Y) = H(Y) - H(Y|X)
決策樹中的信息增益就是互信息,決策樹是采用的上面第二種計算方法,即把分類的不同結果看成不同隨機事件Y,然后把當前選擇的特征看成X,則信息增益就是當前Y的信息熵減去已知X情況下的信息熵。