決策樹的構造是乙個遞迴的過程,有三種情形會導致遞迴返回:(1) 當前結點包含的樣本全屬於同一類別,這時直接將該節點標記為葉節點,並設為相應的類別;(2) 當前屬性集為空,或是所有樣本在所有屬性上取值相同,無法劃分,這時將該節點標記為葉節點,並將其類別設為該節點所含樣本最多的類別;(3) 當前結點包含的樣本集合為空,不能劃分,這時也將該節點標記為葉節點,並將其類別設為父節點中所含樣本最多的類別。演算法的基本流程如下圖所示:
在決策樹學習中,為了盡可能正確分類訓練樣本,結點劃分過程將不斷重複,有時會造成決策樹分支過多,這時就可能因訓練樣本學得「太好了」,以至於把訓練集自身的一些特點當作所有資料都具有的一般性質而導致過擬合。因此可以通過去掉一些分支來降低過擬合的風險。
決策樹剪枝策略主要包括:
- 預剪枝;在構造的過程中先評估,再考慮是否分支。
- 後剪枝;在構造好一顆完整的決策樹後,自底向上,評估分支的必要性。
評估指的是效能度量,即決策樹的泛化效能。之前提到:可以使用測試集作為學習器泛化效能的近似,因此可以將資料集劃分為訓練集和測試集。預剪枝表示在構造數的過程中,對乙個節點考慮是否分支時,首先計算決策樹不分支時在測試集上的效能,再計算分支之後的效能,若分支對效能沒有提公升,則選擇不分支(即剪枝)。後剪枝則表示在構造好一顆完整的決策樹後,從最下面的節點開始,考慮該節點分支對模型的效能是否有提公升,若無則剪枝,即將該節點標記為葉子節點,類別標記為其包含樣本最多的類別。
對於連續值的屬性,若每個取值作為乙個分支則顯得不可行,因此需要進行離散化處理,常用的方法為二分法,基本思想為:給定樣本集d與連續屬性α,二分法試圖找到乙個劃分點t將樣本集d在屬性α上分為≤t與>t。
現實中常會遇到不完整的樣本,即某些屬性值缺失。有時若簡單採取剔除,則會造成大量的資訊浪費,因此在屬性值缺失的情況下需要解決兩個問題:(1)如何選擇劃分屬性。(2)給定劃分屬性,若某樣本在該屬性上缺失值,如何劃分到具體的分支上。
具體參考:周志華《機器學習》第四章–決策樹
若把每個屬性視為座標空間中的乙個座標軸,則d個屬性描述的樣本就對應了d維空間中的乙個資料點,對樣本分類則意味著在這個座標空間中尋找不同類樣本之間的分類邊界。決策樹所形成的分類邊界有乙個明顯的特點:軸平行,即它的分類邊界由若干個與座標軸平行的分段組成。
優點:決策樹演算法中學習簡單的決策規則建立決策樹模型的過程非常容易理解,
決策樹模型可以視覺化,非常直觀
應用範圍廣,可用於分類和回歸,而且非常容易做多類別的分類
能夠處理數值型和連續的樣本特徵
缺點:很容易在訓練資料中生成複雜的樹結構,造成過擬合(overfitting)。剪枝可以緩解過擬合的負作用,常用方法是限制樹的高度、葉子節點中的最少樣本數量。
學習一棵最優的決策樹被認為是np-complete問題。實際中的決策樹是基於啟發式的貪心演算法建立的,這種演算法不能保證建立全域性最優的決策樹。random forest 引入隨機能緩解這個問題
JAVA基礎知識點整理
一.預設的構造方法不一定都是public的 預設構造方法的修飾符是與所在類的修飾符一致的。二.split 分割字元竄有特殊字元竄像 等並不會達到預定的效果。三.一維陣列占用記憶體比二維陣列多,測試 runtime.getruntime totalmemory 可以得到占用記憶體總數,hashmap儲...
VUE基礎知識點整理
純知識點整理,適合vue小白 不小心點了發布 淚目 1,指令 v bind id domid 屬性值繫結 縮寫 id xx v on click add 事件處理 縮寫 click xx v if seen 條件 v for todo in todos data demo methods compu...
C C 基礎知識點整理
1.includeusing namespace std int main cout aa 0 1 endl cout aa 1 endl cout aa 0 endl cout aa 1 endl return 0 2.某二叉樹的後序遍歷和中序遍歷是一樣的都為abcdef,那麼它按層輸出的結果為 ...