# p74圖4.2 決策樹學習基本演算法
輸入:訓練集d = ;
屬性集a = .
過程:函式treegenerate(d, a)
1: 生成結點node;
2: if d中樣本全屬於同一類別c then
3: 將node標記為c類葉節點; return;
4: end if
5: if a = null or d中樣本在a上取值相同 then
6: 將node標記為葉結點,令其類別標記為d中樣本數最多的類; return;
7: end if
8: 從a中選擇最優劃分屬性a*;
9: for a*中的每乙個值a*v do
10: 為node生成乙個分支,令dv表示d中在a*上取值為a*v的樣本子集;
11: if dv為空 then
12: 將分支結點標記為葉結點,其類別標記為d中樣本最多的類; return;
13: else
14: 以treegenerate(dv, a\)為分支結點
15: end if
16: end for
根結點包含所有樣本
遞迴結束的條件有:
第2行:當前結點所有樣本屬於同一類別(標記),無需劃分,將當前結點標記為葉結點,類別為當前樣本類別。
第5行:當前屬性集為空,或是所有樣本在所有屬性上的取值相同,無法劃分
一開始我很納悶為啥會出現這種情況,仔細想了一下應該是訓練樣本中存在衝突資料(即特徵向量完全相同但標記不同),衝突資料的判定測試序列(從根節點到每個葉結點的路徑)完全相同,但是直至屬性集劃分為空或者當前結點下所有樣本在所有屬性上的取值相同時仍然無法進行類別劃分。舉個例子:假設西瓜有三個屬性a,b,c,有兩個訓練樣本在a,b,c上的取值完全相同,但是這兩個樣本最後的標記不同,乙個為好瓜,另乙個為壞瓜。這樣在生成決策樹時,這兩個訓練樣本的判定測試序列完全相同,但是此時屬性集已經為空,這兩個樣本還沒有劃分成為確定類別。於是就有了第6行的劃分選擇,將當前結點標記為葉結點並將其類別標記成d中樣本數最多的類。
第11行:當前結點包含的樣本集合為空,不能劃分
當前訓練集在當前最優屬性的某乙個屬性取值上無樣本,將該分支結點標記為葉結點,類別標記成d中樣本最多的類(當然這只是一種處理方法,可以有其他合理的方法)。我當時的問題是,既然當前結點包含的樣本集合為空,為什麼不能刪除該結點,而是要把它歸為d中樣本最多的類呢?答案是出現這種為空的情況只是當前訓練樣本集的情況,不能代表所有資料,如果某個待測試資料劃分到當前結點時發現決策樹沒有這種情況豈不是很崩潰。
周志華《機器學習》 決策樹
可採用二分法,對樣例在該屬性上的m個取值,取其m 1個間隔中的數作為閾值對樣例進行二分類,選擇最優的劃分點的資訊增益,作為該屬性在該節點進行劃分的資訊增益 注意,其他非連續屬性在某節點使用過後,在其子節點將不能再被用作劃分屬性,但是連續值因為其每次只選擇乙個二分點,所以在使用過後,後續子節點可以繼續...
機器學習 決策樹
一 基本概念 決策樹 decision tree 是一種基本的分類與回歸方法。決策樹模型呈樹形結構,在分類問題中,表示屬於特徵對例項進行分類的過程,它可以認為是if then規則的集合,也可以認為是電議在特徵空間與類空空上的條件概率分布,其主要優點是模型具有可讀性,分類速度快。決策樹的學習通常包括3...
機器學習 決策樹
我覺得決策樹是機器學習所有演算法中最可愛的了 沒有那麼多複雜的數學公式哈哈 下圖是一棵決策樹,用來判斷西瓜是好瓜還是壞瓜 決策過程中提出的每個判定問題都是都對某個屬性的測試,每個測試結果要麼推導出最終結論,要麼匯出進一步判斷的問題,在上次決策結果限定的範圍內做進一步判斷。從上圖可以看出,葉節點對應決...