一共有14個(gè)樣本,其中9個(gè)早上都出去打球,,5個(gè)早上沒出去打球,。在原始數(shù)據(jù)中,統(tǒng)計(jì)了每個(gè)早上的天氣,,濕度,,是否有風(fēng)這3個(gè)條件 輸入數(shù)據(jù)的每一個(gè)特征作為決策樹中的一個(gè)節(jié)點(diǎn),,根據(jù)其取值的不同,,劃分不同的分支,根據(jù)各個(gè)特征的取值,,按照這個(gè)樹狀結(jié)構(gòu)就可以解釋一個(gè)樣本的分類情況,。 對于決策樹模型,其解釋性非常強(qiáng),,可以看做是一連串的if-else條件,,根據(jù)該條件就可以輕松的預(yù)測一個(gè)新的樣本點(diǎn)。決策樹的輸入和輸出都比較直觀,,核心就在于構(gòu)建合適的分類樹,。 在構(gòu)建決策樹的過程中, 對于一個(gè)原始的特征,根據(jù)其取值分割成不同的分支,,分割的過程其實(shí)是一個(gè)取子集的過程,。以outlook為例,分割前是14個(gè)樣本,,9個(gè)play,,5個(gè)no play; 根據(jù)3種取值分割后,sunny有2個(gè)play, 3個(gè)no play, overcast有4個(gè)play, rain有3個(gè)play, 2個(gè)no paly,。 為了量化特征以及分割前后的變化,,引入了以下概念 1. 熵 熵是從信息論中引入的概念,,用來衡量一個(gè)事物的混亂狀態(tài),熵越大,,越無序,,具體的計(jì)算公式如下 p代表的是概率,上述示例數(shù)據(jù)為例共14個(gè)樣本,,其中9個(gè)play, 4個(gè)no play, 對應(yīng)的熵如下 >>> -(np.log2(9/14) * (9/14) + np.log2(5/14) * (5/14)) 和條件概率這個(gè)概念類似,,也要條件熵的概念,,即再特征X下數(shù)據(jù)集的熵,公式如下 >>> - (5/14) * (np.log2(2/5) * (2/5) + np.log2(3/5) * (3/5)) - (5/14) * (np.log2(3/5) * (3/5) + np.log2(2/5) * (2/5)) 在取值為overcast時(shí),,出現(xiàn)了no play為0的情況,無法計(jì)算log值,,此時(shí)直接將其熵定義為0,, 所以上述公式只考慮了取值為sunny和rain的情況。 2. 信息增益 在決策樹中,,我們根據(jù)特征的取值將原始的特征拆分成了不同的分支,,信息增益用來衡量拆分前后復(fù)雜度的變化,具體的計(jì)算公式如下 >>> -(np.log2(9/14) * (9/14) + np.log2(5/14) * (5/14)) + (5/14) * (np.log2(2/5) * (2/5) + np.log2(3/5) * (3/5)) + (5/14) * (np.log2(3/5) * (3/5) + np.log2(2/5) * (2/5)) 信息增益衡量的是用某個(gè)特征拆分前后的復(fù)雜度變化,理想的拆分情況是復(fù)雜度降低的越多,,對應(yīng)的信息增益值越大,,所以對于輸入的多個(gè)特征,一般選擇信息增益大的特征進(jìn)行拆分,。 3. 信息增益率 也叫做信息增益比,, 具體的計(jì)算公式如下 可以看到,相比信息增益,,信息增益比用總體的經(jīng)驗(yàn)熵進(jìn)行了矯正,,將數(shù)據(jù)轉(zhuǎn)換到0到1的范圍,從而可以直接在不同特征之間進(jìn)行比較,。 決策樹的構(gòu)建,,是一個(gè)遞歸的過程,從根節(jié)點(diǎn)開始,,不斷選擇信息增益大的特征作為節(jié)點(diǎn),,依次進(jìn)行拆分,直到信息增益很小或者沒有特征可以選擇為止?;陟啬P偷男畔⒃鲆嫦群蟪霈F(xiàn)了兩種算法,。 首先是ID3算法,只針對離散型的特征,,通過信息增益來選擇特征,;接下來是C4.5算法,對ID3進(jìn)行了改進(jìn),,選擇了信息增益比來選擇特征, 同時(shí)支持處理連續(xù)型的特征,,對特征值排序之后,迭代選取閾值,, 大于閾值為一類,,小于閾值為另一類,從而將連續(xù)性的特征轉(zhuǎn)換為離散型,。 相比熵而言,,基尼系數(shù)沒有對數(shù)運(yùn)算,計(jì)算更快捷,。 對于決策樹而言,,常見的問題是過擬合。此時(shí),,就需要通過剪枝來優(yōu)化決策樹,,所謂剪枝,就是去除決策樹中的某些分支,。根據(jù)生成決策樹和剪枝的順序,,可以分為以下兩種策略 1. 預(yù)剪枝,pre-pruning 2. 后剪枝,,post-pruning 在監(jiān)督學(xué)習(xí)中,,數(shù)據(jù)集會分為訓(xùn)練集和測試集兩部分,在預(yù)剪枝中,訓(xùn)練集用來決定劃分所用的特征,,測試集用來決定該特征是否可以用來劃分?jǐn)?shù)據(jù),;在后剪枝中,先基于訓(xùn)練集生成一顆決策樹,,然后用測試集的數(shù)據(jù)判斷某個(gè)決策樹中的節(jié)點(diǎn)是否需要去除,。 在scikit-learn中,可以方便的構(gòu)建決策樹,,用法如下 >>> from sklearn.datasets import load_iris 輸出結(jié)果如下 默認(rèn)使用的就是CART算法,,同時(shí)通過可視化決策樹,可以讓我們清晰的了解決策的過程,。 |
|