最大熵模型中特徵函數f(x,y)的期望如何計算?
在f(x,y)的期望的計算中,我有一個疑問。這裡說E(f)=∑P(x,y)f(x,y)。既然f(x,y)在x,y某一條件成立的時候取1,其它情況都去0,那這樣豈不是E(f)=∑P(x,y)f(x,y)=P(x,y)*1+0=P(x,y)?就是相當於x,y同時出現的頻率?如果是的話,為什麼不直接定義為E(f)=P(x,y)
謝邀。題主寫法錯誤,滿足f(x, y)=1的(x, y)並非只有一個,故需對應的概率累加。
可參考關於最大熵模型的嚴重困惑:為什麼沒有解析解? - KevinXU 的回答 - 知乎
其實題主的這個思路在初學的時候,我也出現過。不過想通了為什麼要整一個特徵函數之後,就可以回答這個問題了。
特徵函數的出現,在我的理解中是為了得到更好的泛化能力。類比決策樹對於輸入x的處理,假設輸入x是一個有著多個屬性值的實例,決策樹在一個決策點並不是對所有屬性都進行考慮的。這就有點像提取出了特徵中更有信息量的屬性。
那麼如何讓一個線性模型(例如logistic regression: )也有類似的功能?答案就是特徵函數,讓輸入x先經過一系列特徵函數的處理,變成 再送給模型分類(如 )。
此外,當輸入的樣本可能不是數值的向量,比如文本或圖片時,特徵函數的功能更像是特徵向量的製作。對於給定的輸入 ,使用一系列定義好的特徵函數 將其轉換成需要的向量形式。這個向量的維度可能很大(特徵函數很多,但大多都是離散的,且一個樣本激活的特徵函數有限),但大多數都是0,少部分是1或任意實數,這個就看如何定義了。
所以現在的問題就是如何定義這些特徵函數了。假設現在定義的特徵函數就是:
也即(x,y)同現時特徵函數取1,其他情況為0。這時,題主的想法就完全可以順利推導出來。也即 。
但是,但是,特徵函數可以是任意定義的實值函數!也就是說,特徵函數的定義也完全可以是:
那麼顯然這是題主的想法就是不成立的了。換了思路,我定義的特徵函數變成了:
特徵函數只管y不管x了,同樣題主的想法也不成立了。
主要是「f(x,y)在x,y某一條件成立的時候取1,其它情況都取0」,這個不一定要這樣呀,那只是個樣板~不滿足這個條件的時候你取0.1也可以呀,得看特徵的性質以及問題的具體情況
你理解的計算方法是對的,我看過一個用GIS求解最大熵的java代碼,也確實是這麼計算的。即,特徵函數在樣本中的期望值是對應特徵在樣本中出現的頻率。
至於為什麼不直接定義E(f)=P(x,y),我理解在定義中放入f(x,y)是為了之後最大熵模型的推導。
代碼地址:https://github.com/hankcs/MaxEnt推薦閱讀:
※Markov Chain和Gibbs分布到底是什麼關係?
※一系列正態分布的最大值,max(X1,...,Xn),是什麼分布?
※哪裡能找到真實的較大數據集合?
※關於大學至博士期間的數學學習你有什麼學習的經驗?
※檢測異常值的常用方法,除了超過幾倍標準差,還有哪些?