sk-learn 決策樹的超參數


一、參數
criterion:
特征選擇標准,【entropy, gini】。默認gini,即CART算法。

splitter:
特征划分標准,【best, random】。best在特征的所有划分點中找出最優的划分點,random隨機的在部分划分點中找局部最優的划分點。默認的‘best’適合樣本量不大的時候,而如果樣本數據量非常大,此時決策樹構建推薦‘random’。

max_depth:
決策樹最大深度,【int,  None】。默認值是‘None’。一般數據比較少或者特征少的時候可以不用管這個值,如果模型樣本數量多,特征也多時,推薦限制這個最大深度,具體取值取決於數據的分布。常用的可以取值10-100之間,常用來解決過擬合。

min_samples_split:
內部節點(即判斷條件)再划分所需最小樣本數,【int, float】。默認值為2。如果是int,則取傳入值本身作為最小樣本數;如果是float,則取ceil(min_samples_split*樣本數量)作為最小樣本數。(向上取整)

min_samples_leaf:
葉子節點(即分類)最少樣本數。如果是int,則取傳入值本身作為最小樣本數;如果是float,則取ceil(min_samples_leaf*樣本數量)的值作為最小樣本數。這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小於樣本數,則會和兄弟節點一起被剪枝。

min_weight_fraction_leaf:
葉子節點(即分類)最小的樣本權重和,【float】。這個值限制了葉子節點所有樣本權重和的最小值,如果小於這個值,則會和兄弟節點一起被剪枝。默認是0,就是不考慮權重問題,所有樣本的權重相同。

一般來說如果我們有較多樣本有缺失值或者分類樹樣本的分布類別偏差很大,就會引入樣本權重,這時就要注意此值。

max_features:
在划分數據集時考慮的最多的特征值數量,【int值】。在每次split時最大特征數;【float值】表示百分數,即(max_features*n_features)

random_state:
【int, randomSate instance, None】,默認是None

max_leaf_nodes:
最大葉子節點數。【int, None】,通過設置最大葉子節點數,可以防止過擬合。默認值None,默認情況下不設置最大葉子節點數。如果加了限制,算法會建立在最大葉子節點數內最優的決策樹。如果特征不多,可以不考慮這個值,但是如果特征多,可以加限制,具體的值可以通過交叉驗證得到。

min_impurity_decrease:
節點划分最小不純度,【float】。默認值為‘0’。限制決策樹的增長,節點的不純度(基尼系數,信息增益,均方差,絕對差)必須大於這個閾值,否則該節點不再生成子節點。

min_impurity_split(已棄用):
信息增益的閥值。決策樹在創建分支時,信息增益必須大於這個閾值,否則不分裂。(從版本0.19開始不推薦使用:min_impurity_split已被棄用,以0.19版本中的min_impurity_decrease取代。 min_impurity_split的默認值將在0.23版本中從1e-7變為0,並且將在0.25版本中刪除。 請改用min_impurity_decrease。)

class_weight:
類別權重,【dict, list of dicts, balanced】,默認為None。(不適用於回歸樹,sklearn.tree.DecisionTreeRegressor)

指定樣本各類別的權重,主要是為了防止訓練集某些類別的樣本過多,導致訓練的決策樹過於偏向這些類別。balanced,算法自己計算權重,樣本量少的類別所對應的樣本權重會更高。如果樣本類別分布沒有明顯的偏倚,則可以不管這個參數。

presort:
bool,默認是False,表示在進行擬合之前,是否預分數據來加快樹的構建。

對於數據集非常龐大的分類,presort=true將導致整個分類變得緩慢;當數據集較小,且樹的深度有限制,presort=true才會加速分類。

二、方法
(1)訓練(擬合):fit(X, y[, sample_weight])——fit(train_x, train_y)

(2)預測:predict(X)返回標簽、predict_log_proba(X)、predict_proba(X)返回概率,每個點的概率和為1,一般取predict_proba(X)[:, 1]

(3)評分(返回平均准確度):score(X, y[, sample_weight])——score(test_x, test_y)。等效於准確率accuracy_score

(4)參數類:獲取分類器的參數get_params([deep])、設置分類器的參數set_params(**params)。——print(clf.get_params()) ,clf.set_params(***)

DecisionTreeClassifier的其他方法:

apply(X[, check_input])
Returns the index of the leaf that each sample is predicted as.  

返回每個樣本被預測為葉子的索引。

decision_path(X[, check_input]) Return the decision path in the tree   返回樹的決策路徑
get_depth() Returns the depth of the decision tree.  獲取決策樹的深度
get_n_leaves() Returns the number of leaves of the decision tree.  獲取決策樹的葉子節點數
 

模型調參注意事項:
1、當樣本少數量但是樣本特征非常多的時候,決策樹很容易過擬合,一般來說,樣本數比特征數多一些會比較容易建立健壯的模型
2、如果樣本數量少但是樣本特征非常多,在擬合決策樹模型前,推薦先做維度規約,比如主成分分析(PCA),特征選擇(Losso)或者獨立成分分析(ICA)。這樣特征的維度會大大減小。再來擬合決策樹模型效果會好。
3、推薦多用決策樹的可視化,同時先限制決策樹的深度(比如最多3層),這樣可以先觀察下生成的決策樹里數據的初步擬合情況,然后再決定是否要增加深度。
4、在訓練模型先,注意觀察樣本的類別情況(主要指分類樹),如果類別分布非常不均勻,就要考慮用class_weight來限制模型過於偏向樣本多的類別。
5、決策樹的數組使用的是numpy的float32類型,如果訓練數據不是這樣的格式,算法會先做copy再運行。
6、如果輸入的樣本矩陣是稀疏的,推薦在擬合前調用csc_matrix稀疏化,在預測前調用csr_matrix稀疏化。

其他:
如果使用默認DecisionTreeClassifier的參數,得到的AUC較低,很可能是因為出現過擬合,需調整默認參數,避免過擬合。
---------------------
作者:linzhjbtx
來源:CSDN
原文:https://blog.csdn.net/linzhjbtx/article/details/85722187
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM