當(dāng)我們需要對(duì)一個(gè)隨機(jī)事件的概率分布進(jìn)行預(yù)測(cè)時(shí),我們的預(yù)測(cè)應(yīng)當(dāng)滿足全部已知的條件,而對(duì)未知的情況不要做任何主觀假設(shè)。在這種情況下,概率分布最均勻,預(yù)測(cè)的風(fēng)險(xiǎn)最小。因?yàn)檫@時(shí)概率分布的信息熵最大,所以稱之為“最大熵法”。最大熵法在數(shù)學(xué)形式上很漂亮,但是實(shí)現(xiàn)起來比較復(fù)雜,但把它運(yùn)用于金融領(lǐng)域的誘惑也比較大,比如說決定股票漲落的因素可能有幾十甚至上百種,而最大熵方法恰恰能找到一個(gè)同時(shí)滿足成千上萬種不同條件的模型。
這里我們先不討論算法(這里用的是ID3/C4.5),把一棵決策樹建立起來再說。我們要建立的決策樹的形式類似于“如果天氣怎么樣,去玩;否則,怎么著怎么著”的樹形分叉。那么問題是用哪個(gè)屬性(即變量,如天氣、溫度、濕度和風(fēng)力)最適合充當(dāng)這顆樹的根節(jié)點(diǎn),在它上面沒有其他節(jié)點(diǎn),其他的屬性都是它的后續(xù)節(jié)點(diǎn)。借用信息論的概念,我們用一個(gè)統(tǒng)計(jì)量,“信息增益”(InformationGain)來衡量一個(gè)屬性區(qū)分以上數(shù)據(jù)樣本的能力。信息增益量越大,這個(gè)屬性作為一棵樹的根節(jié)點(diǎn)就能使這棵樹更簡(jiǎn)潔,比如說一棵樹可以這么讀成,如果風(fēng)力弱,就去玩;風(fēng)力強(qiáng),再按天氣、溫度等分情況討論,此時(shí)用風(fēng)力作為這棵樹的根節(jié)點(diǎn)就很有價(jià)值。如果說,風(fēng)力弱,再又天氣晴朗,就去玩;如果風(fēng)力強(qiáng),再又怎么怎么分情況討論,這棵樹相比就不夠簡(jiǎn)潔了。計(jì)算信息增益的公式需要用到“熵”(Entropy)。名詞越來越多,讓我們通過手工計(jì)算記住它們的計(jì)算方法,把Excel打開:
1 計(jì)算熵
我們檢查的屬性是是否出去玩。用Excel對(duì)上面數(shù)據(jù)的play變量的各個(gè)取值排個(gè)序(這個(gè)工作簿里把“play”這個(gè)詞去掉),一共是14條記錄,你能數(shù)出取值為yes的記錄有9個(gè),取值為no的有5個(gè),我們說這個(gè)樣本里有9個(gè)正例,5個(gè)負(fù)例,記為S(9+,5-),S是樣本的意思(Sample)。這里熵記為Entropy(S),計(jì)算公式為:

解釋一下,9/14是正例的個(gè)數(shù)與總記錄之比,同樣5/14是負(fù)例占總記錄的比例。log(.)是以2為底的對(duì)數(shù)(我們知道以e為底的對(duì)數(shù)稱為自然對(duì)數(shù),記為ln(.),lg(.)表示以10為底的對(duì)數(shù))。在Excel里我們可以隨便找一個(gè)空白的單元格,鍵入以下公式即得0.940:
這里L(fēng)OG(9/14,2)中的“2”表示以2為底。類似地,如果你習(xí)慣用Matlab做數(shù)學(xué)運(yùn)算本,公式為
其中“2”的含義與上同。
總結(jié):在這個(gè)例子中,我們的輸出屬性(我們要檢查的屬性)“play”只有兩個(gè)取值,同樣地,如果輸出屬性的取值大于2,公式是對(duì)成的,一樣的形式,連加就是,找到各個(gè)取值的個(gè)數(shù),求出各自的比例。如果樣本具有二元輸出屬性,其熵的公式為
其中,p+、p-分別為正例和負(fù)例占總記錄的比例。輸出屬性取值大于2的情況,公式是對(duì)稱的。
2分別以Wind、Humidity、Outlook和Temperature作為根節(jié)點(diǎn),計(jì)算其信息增益
可以數(shù)得,屬性Wind中取值為Weak的記錄有Normal的記錄有8條,其中正例6個(gè),負(fù)例2個(gè);同樣,取值為Strong的記錄6個(gè),正例負(fù)例個(gè)3個(gè)。我們可以計(jì)算相應(yīng)的熵為:
Entropy(Strong)=-(3/6)*log(3/6)-(3/6)*log(3/6)=1.0
現(xiàn)在就可以計(jì)算出相應(yīng)的信息增益了:
Gain(Wind)=Entropy(S)-(8/14)*Entropy(Weak)-(6/14)*Entropy(Strong)=0.940-(8/14)*0.811-(6/14)*1.0=0.048
這個(gè)公式的奧秘在于,8/14是屬性Wind取值為Weak的個(gè)數(shù)占總記錄的比例,同樣6/14是其取值為Strong的記錄個(gè)數(shù)與總記錄數(shù)之比。
同理,如果以Humidity作為根節(jié)點(diǎn):
Gain(Humidity)=0.940-(7/14)*Entropy(High)-(7/14)*Entropy(Normal)=0.151
以O(shè)utlook作為根節(jié)點(diǎn):
Entropy(Sunny)=0.971 ; Entropy(Overcast)=0.0 ;Entropy(Rain)=0.971
Gain(Outlook)=0.940-(5/14)*Entropy(Sunny)-(4/14)*Entropy(Overcast)-(5/14)*Entropy(Rain)=0.247
以Temperature作為根節(jié)點(diǎn):
Entropy(Cool)=0.811 ; Entropy(Hot)=1.0 ; Entropy(Mild)=0.918
Gain(Temperature)=0.940-(4/14)*Entropy(Cool)-(4/14)*Entropy(Hot)-(6/14)*Entropy(Mild)=0.029
這樣我們就得到了以上四個(gè)屬性相應(yīng)的信息增益值:
Gain(Wind)=0.048 ;Gain(Humidity)=0.151 ; Gain(Outlook)=0.247;Gain(Temperature)=0.029
最后按照信息增益最大的原則選Outlook為根節(jié)點(diǎn)。子節(jié)點(diǎn)重復(fù)上面的步驟。這顆樹可以是這樣的,它讀起來就跟你認(rèn)為的那樣
愛華網(wǎng)


