sklearn.tree.DecisionTreeClassifier()函數用於構建決策樹,默認使用CART算法,現對該函數參數進行說明,參考的是scikit-learn 0.20.3版本。
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, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
criterion:選擇結點划分質量的度量標准,默認使用‘gini’,即基尼系數,基尼系數是CART算法中采用的度量標准,該參數還可以設置為 “entropy”,表示信息增益,是C4.5算法中采用的度量標准。
splitter:結點划分時的策略,默認使用‘best’。‘best’ 表示依據選用的criterion標准,選用最優划分屬性來划分該結點,一般用於訓練樣本數據量不大的場合,因為選擇最優划分屬性需要計算每種候選屬性下划分的結果;該參數還可以設置為“random”,表示最優的隨機划分屬性,一般用於訓練數據量較大的場合,可以減少計算量,但是具體如何實現最優隨機划分暫時不太明白,這需要查看該部分的源碼。
max_depth:設置決策樹的最大深度,默認為None。None表示不對決策樹的最大深度作約束,直到每個葉子結點上的樣本均屬於同一類,或者少於min_samples_leaf參數指定的葉子結點上的樣本個數。也可以指定一個整型數值,設置樹的最大深度,在樣本數據量較大時,可以通過設置該參數提前結束樹的生長,改善過擬合問題,但一般不建議這么做,過擬合問題還是通過剪枝來改善比較有效。
min_samples_split:當對一個內部結點划分時,要求該結點上的最小樣本數,默認為2。
min_samples_leaf:設置葉子結點上的最小樣本數,默認為1。當嘗試划分一個結點時,只有划分后其左右分支上的樣本個數不小於該參數指定的值時,才考慮將該結點划分,換句話說,當葉子結點上的樣本數小於該參數指定的值時,則該葉子節點及其兄弟節點將被剪枝。在樣本數據量較大時,可以考慮增大該值,提前結束樹的生長。
min_weight_fraction_leaf :在引入樣本權重的情況下,設置每一個葉子節點上樣本的權重和的最小值,一旦某個葉子節點上樣本的權重和小於該參數指定的值,則該葉子節點會聯同其兄弟節點被減去,即其父結點不進行划分。該參數默認為0,表示不考慮權重的問題,若樣本中存在較多的缺失值,或樣本類別分布偏差很大時,會引入樣本權重,此時就要謹慎設置該參數。
max_features:划分結點、尋找最優划分屬性時,設置允許搜索的最大屬性個數,默認為None。假設訓練集中包含的屬性個數為n,None表示搜索全部n個的候選屬性;‘auto’表示最多搜索sqrt(n)個屬性;sqrt表示最多搜索sqrt(n)個屬性;‘log2’表示最多搜索log2(n)個屬性;用戶也可以指定一個整數k,表示最多搜索k個屬性。需要說明的是,盡管設置了參數max_features,但是在至少找到一個有效(即在該屬性上划分后,criterion指定的度量標准有所提高)的划分屬性之前,最優划分屬性的搜索不會停止。
random_state :當將參數splitter設置為‘random’時,可以通過該參數設置隨機種子號,默認為None,表示使用np.random產生的隨機種子號。
max_leaf_nodes : 設置決策樹的最大葉子節點個數,該參數與max_depth等參數參數一起,限制決策樹的復雜度,默認為None,表示不加限制。
min_impurity_decrease :打算划分一個內部結點時,只有當划分后不純度(可以用criterion參數指定的度量來描述)減少值不小於該參數指定的值,才會對該結點進行划分,默認值為0。可以通過設置該參數來提前結束樹的生長。
min_impurity_split : 打算划分一個內部結點時,只有當該結點上的不純度不小於該參數指定的值時,才會對該結點進行划分,默認值為1e-7。該參數值0.25版本之后將取消,由min_impurity_decrease代替。
class_weight:設置樣本數據中每個類的權重,這里權重是針對整個類的數據設定的,默認為None,即不施加權重。用戶可以用字典型或者字典列表型數據指定每個類的權重,假設樣本中存在4個類別,可以按照 [{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}] 這樣的輸入形式設置4個類的權重分別為1、5、1、1,而不是 [{1:1}, {2:5}, {3:1}, {4:1}]的形式。該參數還可以設置為‘balance’,此時系統會按照輸入的樣本數據自動的計算每個類的權重,計算公式為:n_samples / ( n_classes * np.bincount(y) ),其中n_samples表示輸入樣本總數,n_classes表示輸入樣本中類別總數,np.bincount(y) 表示計算屬於每個類的樣本個數,可以看到,屬於某個類的樣本個數越多時,該類的權重越小。若用戶單獨指定了每個樣本的權重,且也設置了class_weight參數,則系統會將該樣本單獨指定的權重乘以class_weight指定的其類的權重作為該樣本最終的權重。
presort : 設置對訓練數據進行預排序,以提升結點最優划分屬性的搜索,默認為False。在訓練集較大時,預排序會降低決策樹構建的速度,不推薦使用,但訓練集較小或者限制樹的深度時,使用預排序能提升樹的構建速度。