決策樹通常包括三個步驟: 特徵選擇,決策樹生成和決策樹剪枝
決策樹的生成過程就是:使用滿足劃分準則的特徵不斷的將資料集劃分為純度更高,不確定性更小的子集的過程。
id3:採用資訊增益劃分資料。計算使用所有特徵劃分資料集,得到多個特徵劃分資料集的資訊增益,從這些資訊增益中選擇最大的,因而當前結點的劃分特徵便是使資訊增益最大的劃分所使用的特徵。
不足:資訊增益偏向取值較多的特徵。
c4.5:採用資訊增益比劃分資料,彌補id3的不足。
不足:只能進行分類。
cart:採用基尼係數劃分資料,同時決定改特徵的最優二值切分點,可針對離散和連續型,可以做分類和回歸。
不足:只能進行分類。
通常決策樹樹**選擇特徵的方法有id3, c4.5演算法, c5.0演算法和cart樹。在《
機器學習演算法實踐-決策樹(decision tree)
》中對id3以及c4.5演算法進行了介紹並使用id3演算法處理了分類問題。本文主要使用決策樹解決回歸問題,使用cart(classification and regression trees)演算法。
cart
cart是一種二分遞迴分割的技術,分割方法採用基於最小距離的基尼指數估計函式,將當前的樣本集分為兩個子樣本集,使得生成的的每個非葉子節點都有兩個分支。因此,cart演算法生成的決策樹是結構簡潔的二叉樹。
分類樹是針對目標變數是離散型變數,通過二叉樹將資料進行分割成離散類的方法。而回歸樹則是針對目標變數是連續性的變數,通過選取最優分割特徵的某個值,然後資料根據大於或者小於這個值進行劃分進行樹**最終生成回歸樹。
特徵和最佳分割點的選取
在使用決策樹解決回歸問題中我們需要不斷的選取某一特徵的乙個值作為分割點來生成子樹。選取的標準就是使得被分割的兩部分資料能有最好的純度。
樹**的終止條件
有了選取分割特徵和最佳分割點的方法,樹便可以依此進行**,但是**的終止條件是什麼呢?
來自 剪枝是決策樹學習演算法對付過擬合的主要手段。決策樹剪枝的基本策略有「預剪枝」和「後剪枝」。
預剪枝是指在決策樹生成過程中,對每個結點在劃分前先進行估計,若當前結點的劃分不能帶來決策樹泛化效能提公升,則停止劃分並將當前結點標記為葉節點。
後剪枝是指先從訓練集生成一顆完整的決策樹,然後自底向上地對非結點進行考察,若講該結點對應的子樹替換成葉節點能帶來決策樹泛化效能的提公升,則將該子樹替換成葉節點。
其中對於函式 tree.decisiontreeclassifier()中的具體引數
class sklearn.tree.decisiontreeclassifier(criterion=『gini』, splitter=『best』, max_depth=none, min_samples_split=2,min_samples_leaf =1, min_weight_fraction_leaf=0.0, max_features=none, random_state=none, max_leaf_nodes=none,class_weight=none, presort=false)
criterion:string型別,可選(預設為"gini")
衡量分類的質量。支援的標準有"gini"代表的是gini impurity(不純度)與"entropy"代表的是information gain(資訊增益)。
splitter:string型別,可選(預設為"best")
一種用來在節點中選擇分類的策略。支援的策略有"best",選擇最好的分類,"random"選擇最好的隨機分類。
max_features:int,float,string or none 可選(預設為none)
在進行分類時需要考慮的特徵數。
1.如果是int,在每次分類是都要考慮max_features個特徵。
2.如果是float,那麼max_features是乙個百分率並且分類時需要考慮的特徵數是int(max_features*n_features,其中n_features是訓練完成時發特徵數)。
3.如果是auto,max_features=sqrt(n_features)
4.如果是sqrt,max_features=sqrt(n_features)
5.如果是log2,max_features=log2(n_features)
6.如果是none,max_features=n_features
注意:至少找到乙個樣本點有效的被分類時,搜尋分類才會停止。
max_depth:int or none,可選(預設為"none")
表示樹的最大深度。如果是"none",則節點會一直擴充套件直到所有的葉子都是純的或者所有的葉子節點都包含少於min_samples_split個樣本點。忽視max_leaf_nodes是不是為none。
min_samples_split:int,float,可選(預設為2)
區分乙個內部節點需要的最少的樣本數。
1.如果是int,將其最為最小的樣本數。
2.如果是float,min_samples_split是乙個百分率並且ceil(min_samples_split*n_samples)是每個分類需要的樣本數。ceil是取大於或等於指定表示式的最小整數。
min_samples_leaf:int,float,可選(預設為1)
乙個葉節點所需要的最小樣本數:
1.如果是int,則其為最小樣本數
2.如果是float,則它是乙個百分率並且ceil(min_samples_leaf*n_samples)是每個節點所需的樣本數。
min_weight_fraction_leaf:float,可選(預設為0)
乙個葉節點的輸入樣本所需要的最小的加權分數。
max_leaf_nodes:int,none 可選(預設為none)
在最優方法中使用max_leaf_nodes構建乙個樹。最好的節點是在雜質相對減少。如果是none則對葉節點的數目沒有限制。如果不是none則不考慮max_depth.
class_weight:dict,list of dicts,「banlanced」 or none,可選(預設為none)
表示在表中的類的關聯權值。如果沒有指定,所有類的權值都為1。對於多輸出問題,一列字典的順序可以與一列y的次序相同。
"balanced"模型使用y的值去自動適應權值,並且是以輸入資料中類的頻率的反比例。如:n_samples/(n_classes*np.bincount(y))。
對於多輸出,每列y的權值都會想乘。
如果sample_weight已經指定了,這些權值將於samples以合適的方法相乘。
random_state:int,randomstate instance or none
如果是int,random_state 是隨機數字發生器的種子;如果是randomstate,random_state是隨機數字發生器,如果是none,隨機數字發生器是np.random使用的randomstate instance.
persort:bool,可選(預設為false)
是否預分類資料以加速訓練時最好分類的查詢。在有大資料集的決策樹中,如果設為true可能會減慢訓練的過程。當使用乙個小資料集或者乙個深度受限的決策樹中,可以減速訓練的過程。
決策樹演算法梳理
熵 entropy 在資訊理論與概率統計中,熵 entropy 是表示隨機變數不確定性的度量。設x是乙個取有限個值的離散隨機變數,其概率分布為 則隨機變數x的熵定義為 熵只依賴於x的分布,而與x的取值無關,所以也可將x的熵記作h 即 熵取值最大,隨機變數不確定性最大。條件熵 設有隨機變數 x,y 其...
決策樹演算法梳理
熵 又稱為自資訊,度量隨機變數的不確定性。純度 聯合熵 聯合熵是描述一對隨機變數平均所需要的資訊量 條件熵 h y x 表示在已知隨機變數 x 的條件下,隨機變數 y 的不確定性 資訊增益 以某特徵劃分資料集前後的熵的差值 基尼不純度 指將來自集合中的某種結果隨機應用在集合中,某一資料項的預期誤差率...
決策樹演算法梳理
1.資訊理論基礎 資訊熵 資訊熵是度量樣本的集合純度最常用的一種指標。在資訊理論和概率統計中,熵是表示隨機變數不確定性的度量。聯合熵 兩個隨機變數x,y的聯合分布,可以形成聯合熵joint entropy,用h x,y 表示。條件熵 設有隨機變數 x,y 其聯合概率分布為 條件熵h y x 表示在已...