決策樹學習基本算法
輸入:訓練集;
屬性集.
過程:函數
1: 生成結點node;
2: if 中樣本全屬於同一類別 then
3: 將node標記為類葉結點; return
4: end if
5: if 中樣本在上取值相同 then
6: 將node標記為葉結點,其類別標記為中樣本數最多的類; return
7: end if
8: 從中選擇最優化分屬性
9: for 的每一個值 do
10: 為node生成一個分支; 令表示中在上取值為的樣本子集;
11: if 為空 then
12: 將分支結點標記為葉結點,其類別標記為中樣本最多的類; return
13: else
14: 以為分支結點
15: end if
16: end for
輸出:以node為根結點的一棵決策樹
Table3 天氣數據集
No. |
outlook |
temperature |
humidity |
windy |
play |
1 |
sunny |
85.0 |
85.0 |
FALSE |
no |
2 |
sunny |
80.0 |
90.0 |
TRUE |
no |
3 |
overcast |
83.0 |
86.0 |
FALSE |
yes |
4 |
rainy |
70.0 |
96.0 |
FALSE |
yes |
5 |
rainy |
68.0 |
80.0 |
FALSE |
yes |
6 |
rainy |
65.0 |
70.0 |
TRUE |
no |
7 |
overcast |
64.0 |
65.0 |
TRUE |
yes |
8 |
sunny |
72.0 |
95.0 |
FALSE |
no |
9 |
sunny |
69.0 |
70.0 |
FALSE |
yes |
10 |
rainy |
75.0 |
80.0 |
FALSE |
yes |
11 |
sunny |
75.0 |
70.0 |
TRUE |
yes |
12 |
overcast |
72.0 |
90.0 |
TRUE |
yes |
13 |
overcast |
81.0 |
75.0 |
FALSE |
yes |
14 |
rainy |
71.0 |
91.0 |
TRUE |
no |
信息增益
假定當前樣本集合中第類樣本所占的比例為,則的信息熵定義為:
假定離散屬性有個可能的取值,若使用來對樣本集合進行划分,則會產生個分支結點,其中第個分支結點包含了中所有在屬性上取值為的樣本,記為. 計算出的信息熵,再考慮到不同的分支結點所包含的樣本數不同,給分支結點賦予權重,即樣本數越多的分支結點的影響越大,於是可計算出用屬性對樣本集進行划分所獲得的"信息增益"
ID3算法選擇屬性.
以天氣數據集為例,在決策樹學習開始時,根結點包含中的所有樣例,其中正例占,反例占.於是可計算出根結點的信息熵為
我們要計算出當前屬性集合{outlook, temperature, humidity, windy}中每個屬性的信息增益。以屬性"outlook"為例,它有3個可能的取值:{sunny, overcast, rainy}.若使用該屬性對D進行划分,則可得到3個子集,分別記為:(outlook = sunny),(outlook = overcast),(outlook = rainy).
子集包含編號為{1,2,8,9,11}的5個樣例,其中正例占,反例占包含編號為{3,7,12,13}的4個樣例,其中正、反例分別占,反例占包含編號為{4,5,6,10,14}的5個樣例,其中正、反例分別占.根據公式計算出用"outlook"划分之后所獲得的3個分支結點的信息熵為
可計算出屬性"outlook"的信息增益為
類似的,我們可計算出其他屬性的信息增益。
對連續屬性"temperature",C4.5采用二分法對連續屬性進行處理。
首先找出訓練樣本在"temperature"屬性上的最大和最小值,在最大和最小值限定的取值區間上設置多個等分斷點;分別計算以這些斷點為分裂點的信息增益值,並比較;具有最大信息增益的斷點及最佳分裂點,自該分裂點把整個取值區間划分為兩部分,相應的依據記錄在該屬性上的取值,也將該記錄集划分為兩部分。
以64.5為例,屬性"temperature"可看做有兩個取值
增益率
信息增益准則對可取值數目較多的屬性有所偏好,為減少這種偏好可能帶來的不利影響,C4.5算法使用"增益率"來選擇最優划分屬性. 采用相同的符號表示,增益率定義為:
,
其中
稱為屬性的"固有值"。屬性的可能取值數目越多(即越大),則值通常會越大。
對天氣數據集,以屬性"outlook"為例,
圖 在天氣數據集上基於信息增益率生成的決策樹
基尼指數
CART決策樹使用"基尼指數"來選擇划分屬性。采用相同的符號,數據集D的純度可用基尼值來度量:
反映了從數據集中隨機抽取兩個樣本,其類別標記不一致的概率。因此,越小,則數據集D的純度越高。
屬性a的基尼指數定義為
最優划分屬性
剪枝處理
決策樹剪枝的基本策略有"預剪枝"和"后剪枝"。預剪枝是指在決策樹生成過程中,對每個結點在划分前先進行估計,若當前結點的划分不能帶來決策樹泛化性能提升,則停止划分並將當前結點標記為葉結點;后剪枝則是先從訓練集生成一棵完整的決策樹,然后自底向上地對非葉結點進行考察,若將該結點對應的子樹替換為葉結點能帶來決策樹泛化性能提升,則將該子樹替換為非葉結點。
預剪枝使得決策樹的很多分支都沒有"展開",這不僅降低了過擬合的風險,還顯著減少了決策樹的訓練時間開銷和測試時間開銷。但另一方面,有些分支的當前划分雖不能提升泛化性能、甚至可能導致泛化性能暫時下降,但在其基礎上進行的后續划分卻有可能導致性能顯著提高;預剪枝基於"貪心"本質禁止這些分支展開,給預剪枝決策樹帶來了欠擬合的風險。
一般情形下,后剪枝決策樹的欠擬合風險很小,泛化性能往往優於預剪枝決策樹。但后剪枝過程是在生成完全決策樹之后進行的,並且要自底向上地對樹中的所有非葉結點進行逐一考察,因此其訓練時間開銷比未剪枝決策樹和預剪枝決策樹都要大得多。
缺失值處理
-
如何在屬性缺失的情況下進行划分屬性選擇?
將信息增益的計算式推廣為
其中表示D中在屬性上沒有缺失值的樣本子集,表示中在屬性a上取值為的樣本子集,對屬性a,表示無缺失值樣本所占的比例,表示無缺失值樣本中第類所占的比例,則表示無缺失值樣本中在屬性a上取值為的樣本所占的比例。
-
給定划分屬性,若樣本在該屬性上的值缺失,如何對樣本進行划分?
-
若樣本x在划分屬性a上的取值已知,則將x划入與其取值對應的子結點,且樣本權值在子結點中保持為.
-
若樣本在划分屬性上的取值未知,則將x同時划入所有子結點,且樣本權值在與屬性值對應的子結點中調整為;
在決策樹學習開始階段,根結點中各樣本的權重初始化為1.
隨機森林
簡單地說,隨機森林就是用隨機的方式建立一個森林,森林里面有很多的決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯的。在得到森林之后,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬於哪一類(對於分類算法),然后看看哪一類被選擇最多,就預測這個樣本為那一類。
隨機森林主要包括4個部分:隨機選擇樣本;隨機選擇特征;構建決策樹;隨機森林投票分類。
給定一個訓練樣本集,數量為N,使用有放回采樣到N個樣本,構成一個新的訓練集。注意這里是有放回的采樣,所以會采樣到重復的樣本。詳細來說,就是采樣N次,每次采樣一個,放回,繼續采樣。即得到了N個樣本。然后我們把這個樣本集作為訓練集,進入下面的一步。
從總量為M的特征向量中,隨機選擇m個特征,其中m可以等於sqrt(M),然后計算m個特征的增益,選擇最優特征(屬性)。注意,這里的隨機選擇特征是無放回的選擇!
有了上面隨機產生的樣本集,我們就可以使用一般決策樹的構建方法,得到一棵分類(或者預測)的決策樹。需要注意的是,在計算節點最優分類特征的時候,我們要使用上面的隨機選擇特征方法。而選擇特征的標准可以是我們常見的Information Gain(ID3) 或者 Gain Ratio(C4.5)。
通過上面的三步走,我們可以得到一棵決策樹,我們可以重復這樣的過程T次,就得到了T棵決策樹。然后來了一個測試樣本,我們就可以用每一棵決策樹都對它分類一遍,得到了T個分類結果。這時,我們可以使用簡單的投票機制,或者該測試樣本的最終分類結果。
按照1生成t個決策樹之后,對於每個新的測試樣例,綜合多個決策樹的分類結果來作為隨機森林的分類結果。
(1)目標特征為數字類型:取t個決策樹的平均值作為分類結果。
(2)目標特征為類別類型:少數服從多數,取單棵樹分類結果最多的那個類別作為整個隨機森林的分類結果。
優點:
它能夠處理很高維度(feature很多)的數據,並且不用做特征選擇;
由於隨機選擇樣本導致的每次學習決策樹使用不同訓練集,所以可以一定程度上避免過擬合;
缺點:
隨機森林已經被證明在某些噪音較大的分類或回歸問題上會過擬合;
對於有不同級別的屬性的數據,級別划分較多的屬性會對隨機森林產生更大的影響,所以隨機森林在這種數據上產出的屬性權值是不可信的