sklern中使用sklearn.tree.DecisionTreeClassifier類來實現決策樹分類算法。
模型調參常用參數如下:
名稱 | 功能 | 描述 |
criterion | 特徵選擇標準 | ‘gini’ or ‘entropy’ (default=”gini”),前者是基尼係數,後者是信息熵。兩種算法差異不大對準確率無影響,信息墒雲孫效率低一點,因爲它有對數運算.一般說使用默認的基尼係數”gini”就可以了,即CART算法。除非你更喜歡類似ID3, C4.5的最優特徵選擇方法。 |
splitter | 特徵劃分標準 | ‘best’ or ‘random’ (default=”best”) 前者在特徵的所有劃分點中找出最優的劃分點。後者是隨機的在部分劃分點中找局部最優的劃分點。 默認的”best”適合樣本量不大的時候,而如果樣本數據量非常大,此時決策樹構建推薦”random” 。 |
max_depth | 決策樹最大深度 | int or None, optional (default=None) 一般來說,數據少或者特徵少的時候可以不管這個值。如果模型樣本量多,特徵也多的情況下,推薦限制這個最大深度,具體的取值取決於數據的分佈。常用的可以取值10-100之間。常用來解決過擬合。 |
min_impurity_decrease | 節點劃分最小不純度 | float, optional (default=0.) 這個值限制了決策樹的增長,如果某節點的不純度(基尼係數,信息增益,均方差,絕對差)小於這個閾值,則該節點不再生成子節點。 sklearn 0.19.1版本之前叫 min_impurity_split |
min_samples_split |
內部節點再劃分所需最小樣本數 | int, float, optional (default=2) 如果是 int,則取傳入值本身作爲最小樣本數; 如果是 float,則去 ceil(min_samples_split * 樣本數量) 的值作爲最小樣本數,即向上取整。 |
min_samples_leaf | 葉子節點最少樣本數 | 如果是 int,則取傳入值本身作爲最小樣本數; 如果是 float,則去 ceil(min_samples_leaf * 樣本數量) 的值作爲最小樣本數,即向上取整。 這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小於樣本數,則會和兄弟節點一起被剪枝。 |
max_leaf_nodes | 最大葉子節點數 | int or None, optional (default=None) 通過限制最大葉子節點數,可以防止過擬合,默認是”None”,即不限制最大的葉子節點數。如果加了限制,算法會建立在最大葉子節點數內最優的決策樹。如果特徵不多,可以不考慮這個值,但是如果特徵分成多的話,可以加以限制,具體的值可以通過交叉驗證得到。 |
min_impurity_split | 信息增益的閥值 | 決策樹在創建分支時,信息增益必須大於這個閥值,否則不分裂 min_weight_fraction_leaf 葉子節點最小的樣本權重和 float, optional (default=0.) 這個值限制了葉子節點所有樣本權重和的最小值,如果小於這個值,則會和兄弟節點一起被剪枝。 默認是0,就是不考慮權重問題。一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分佈類別偏差很大,就會引入樣本權重,這時我們就要注意這個值了。 |
class_weight | 類別權重 | dict, list of dicts, “balanced” or None, default=None 指定樣本各類別的的權重,主要是爲了防止訓練集某些類別的樣本過多,導致訓練的決策樹過於偏向這些類別。這裏可以自己指定各個樣本的權重,或者用“balanced”,如果使用“balanced”,則算法會自己計算權重,樣本量少的類別所對應的樣本權重會高。當然,如果你的樣本類別分佈沒有明顯的偏倚,則可以不管這個參數,選擇默認的”None” 不適用於迴歸樹 sklearn.tree.DecisionTreeRegressor |