Python機器學習算法實作
Author:louwill
Machine Learning Lab
最大熵原理(Maximum Entropy Principle)是一種基于資訊熵理論的一般原理,在機器學習領域也有着廣泛的應用價值。基于最大熵原理确定的分類模型也叫最大熵模型。所謂資訊熵,即一種描述資訊不确定程度的量。而最大熵方法認為熵在由已知資訊得到的限制條件下的最大化機率分布是充分利用已知資訊并對未知部分作最少的假定的機率分布。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SN0UTM0cjMhFWOlNmN3gTOyYzX0MzNzYTMyAzLcZDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
資訊熵
已知一個離散型随機變量
,其資訊熵可以定義為:
若
為連續型随機變量,其資訊熵可定義為:
其中
為分布函數的機率密度函數,
為離散點的機率分布。最大熵方法就是在給定限制條件下求得
或
使得熵
達到最大值,其本質上就是一個求解限制的最優化問題。
最大熵模型
假設目标分類模型是一個條件機率分布
,其中
表示輸入,
表示輸出,在給定輸入
的情況下,以條件機率
輸出
。在給定訓練資料集的情況下,學習的目标就是選擇最大熵模型作為目标模型。
在給定資料集的情況下,可以确定其聯合機率分布
的經驗分布
和邊緣機率分布
的經驗分布
。然後我們用特征函數
來描述輸入輸出之間的一個事實,
的定義為一個0-1函數,即
與
滿足某一事實時取值為1,否則取值為0。
特征函數
關于經驗分布
的期望值為
:
特征函數
關于模型
經驗分布
的期望值為
:
如果模型能夠從已知資料中擷取足夠的資訊,我們就可以假設上述兩個期望值相等,即有:
具體地:
上式即可作為最大熵模型學習的限制條件,如果有
個特征函數,即有
個限制條件。
假設滿足上述特征函數構造的限制條件的模型集合為
,定義在模型集合中的條件熵
最大的模型即為最大熵模型:
給定特征函數條件和機率限制條件的情況下,最大熵模型的學習等價于求解限制最優化問題:
将上述最大化問題改寫為最小化問題:
通過拉格朗日乘子法可将上述限制優化轉化為無限制最優化問題,并将其原始問題轉化為對偶問題進行求解,定義拉格朗日函數
:
最優化的原始問題為:
其對偶問題為:
針對該對偶問題的求解,我們可以先嘗試求解其内部的極小化問題
,令:
其中:
将
對
求偏導并令為0,可解得:
其中:
由式
表示的模型即為最大熵模型。
然後即可求解外部極大化問題:
将其解記為
:
最大熵模型可以歸結為對偶函數
的極大化,優化求解得到的
即為最終的最大熵模型。
最大熵算法實作
最大熵模型求解本質在于求解凸優化問題。本節就不針對該求解過程提供手寫算法實作。借助于maxentropy庫我們看以下最大熵模型的基本實作方式。
基于maxentropy的一個簡單實作案例:
import numpy as np
import maxentropy
samplespace = np.arange(6) + 1
model = maxentropy.Model(samplespace)
model.verbose = True
# 設定特征期望值
K = [4.5]
# 拟合最大熵模型
model.fit(f, K)
求解過程如下:
檢視拟合參數:
model.params
array([ 0.37354745])
實際求解時模型也可能存在不收斂的情況,可以嘗試像BFGS等不同的優化算法進行求解。
參考資料:
李航 統計學習方法 第二版