本文來自之前在Udacity上自學(xué)機器學(xué)習(xí)的系列筆記。這是第6篇,介紹了監(jiān)督學(xué)習(xí)中的決策樹模型。
決策樹
決策樹是監(jiān)督學(xué)習(xí)中的分類模型的一種。關(guān)于分類模型,我們先了解下面的的概念:
- Instance:實例,表示輸入input
- Concept:概念,表示輸出函數(shù)Function
- Target concept:目標概念,即根據(jù)輸入,希望得到的輸出是什么
- Sample:訓(xùn)練集Training set
- Candidate:候選的輸出函數(shù)Function
- Testing set:測試集Testing set
什么是決策樹?它就像一顆倒過來的樹形結(jié)構(gòu)一樣。比如,我們決定是否去餐廳A吃飯,我們會考慮多個因素,比如說肚子是否餓了、餐廳是否滿座、中餐還是西餐等。最后,我們可以依次對每一個因素的判斷,來得到結(jié)論。

所以,決策樹就是:
- 選擇數(shù)據(jù)集的一個特征,數(shù)據(jù)集作為初始的判斷節(jié)點(Nodes),根據(jù)對這個特征的判斷(Attributes),將數(shù)據(jù)集分為幾類子節(jié)點;
- 沿著不同的子數(shù)據(jù)集,再選擇數(shù)據(jù)集的一個特征,進行判斷并細分數(shù)據(jù)集;
- 重復(fù)步驟2,直到獲得滿足條件的數(shù)據(jù)集,即葉子節(jié)點的數(shù)據(jù)集中的數(shù)據(jù)大多都屬于同一類別了。
AND、OR、XOR
我們可以用“AND”,“OR”和“XOR”來加深理解。
- "AND"表示A和B同時為真時,C為真;否者為假;
- “OR”表示A或B為真時,C為真;否者為假;
- “XOR”表示A和B的結(jié)果不相同時,C為真,否則為假。
從而可以表示為:

上面是兩個節(jié)點的情況,這可以推廣到n個節(jié)點的情況。對于“AND”和“OR”,n個節(jié)點判斷的計算量是線性的n階運算;而“XOR”的計算量是指數(shù)級的階運算。如果我們用真值表來表示n個節(jié)點的“XOR”決策樹的話,每個節(jié)點是二元的,那么一共有
種情況,而輸出則有
種,這個運算量是很大的。
模型
由上面的介紹,我們現(xiàn)在知道了,決策樹是一種樹狀結(jié)構(gòu)模型,可以解決分類的問題。
解決這類問題,可以通過特征選擇的方法。
算法
ID3:
- 選擇最優(yōu)的特征A;
- 賦予特征A到?jīng)Q策樹的節(jié)點;
- 對于特征A的每個值,創(chuàng)建節(jié)點的分支;
- 劃分訓(xùn)練集到?jīng)Q策樹的子節(jié)點;
- 如果子結(jié)點的數(shù)據(jù)得到完美地劃分,那么模型訓(xùn)練結(jié)束;否則繼續(xù)選擇其他特征進行迭代。
ID3算法的特征選取按照“信息增益”最大的特征進行。所謂“信息增益”,字面上意思就是,根據(jù)該特征來劃分數(shù)據(jù)可以降低數(shù)據(jù)集中的不確定性,即對每個劃分出來的子數(shù)據(jù)集,里面的樣本基本屬于同一類。
這個方法背后思想也是很樸素的。因為當(dāng)我們對一個不確定的問題進行思考時,會優(yōu)先根據(jù)問題的特征,以及特征可能存在的情況進行細分,并且這種細分可以將問題最大程度地確定清楚。
熵(Entropy)
在信息學(xué)中,用“熵”這個概念來表示信息的不確定性,或者說數(shù)據(jù)集的不純度。
假設(shè)一個數(shù)據(jù)集的樣本中,包含了
個樣本,每個樣本有
個特征;一共有
個分類標簽。用
表示標簽集合的概率分布,那么整個數(shù)據(jù)集的熵定義為:
如果Entropy越大,說明數(shù)據(jù)集的不純度越高,不確定性越大。
信息增益(Information Gain)
“信息增益”是可以降低這個數(shù)據(jù)集不純度的定義。假設(shè)父節(jié)點經(jīng)過某特征
的劃分,根據(jù)這個特征的取值
,劃分為多個子節(jié)點
。那么可以得到:
計算例子
| Grade | Bumpiness | Speed limit | Speed |
|---|---|---|---|
| steep | bumpy | yes | slow |
| steep | smooth | yes | slow |
| flat | bumpy | no | fast |
| steep | smooth | no | fast |
上述表格的特征分別是公路的Grade, Bumpiness和Speed limit特征,然后駕駛速度Speed是相應(yīng)的輸出。
對于父節(jié)點(ssff),對應(yīng)有,且
如果選擇Grade特征進行劃分數(shù)據(jù)集,可以劃分為(ssf)和(f)。
對于子節(jié)點(f),有,且
對于子節(jié)點(ssf),有,且
從而
綜上,可以得到特征Grade下的信息增益
同理,可以求得
所以,Speed limit的信息增益最大,可以使用Speed limit作為最優(yōu)特征進行劃分數(shù)據(jù)集。
其他注意點
如果特征是連續(xù)值,例如年齡、體重、距離等,可以進行離散化處理,比如說年齡段在20到30的。
對于存在連續(xù)值的特征的決策樹,可能有必要重復(fù)某個特征的判斷,比如說年齡在20到30歲,如果判斷為F,那就還需要對年齡繼續(xù)判斷,到底是大于30歲,還是小于20歲。
如果所有數(shù)據(jù)集都得到正確地劃分,或者沒有更多的特征時,就可以停止決策樹。另外,沒有出現(xiàn)過擬合情況也是。
決策樹的優(yōu)點是它相對來說比較直觀和容易理解。但缺點就是容易過擬合,這是因為樹的分叉過細導(dǎo)致。特別是當(dāng)數(shù)據(jù)集包含大量特征的數(shù)據(jù)時。所以需要仔細地調(diào)整參數(shù),避免過擬合。
具體scikit-learn可以參考:
https://scikit-learn.org/stable/modules/tree.html#tree