1、criterion: 特征選取標准。
默認:gini。
可選gini(基尼系數)或者entropy(信息增益)。
1.1 選擇entropy,則是ID3或C4.5算法。
ID3算法原理:
a 計算訓練集所有樣本的信息熵。
b 計算每一特征分類后的信息增益。
c 選擇信息增益最大的特征進行分類,得到子節點。
d 在還未被選擇的特征中迭代b和c,直到無特征可分或信息增益已經無法達到要求的標准時,算法終止。
C4.5算法原理:
C4.5是在ID3的算法基礎上,采用信息增益率來做為特征選擇,通過增加類別的懲罰因子,規避了ID3中類別越多信息增益越大的問題,同時也可以對連續變量通過均值離散化的方式,解決了ID3算法無法處理連續變量的問題。過程和ID3一樣。
1.2通常選擇gini,則是CART算法。
我簡單描述一下CART算法原理:
CART不再通過信息熵的方式選取最優划分特征,而是采用基尼系數,也叫基尼不純度,兩者衡量信息量的作用相當,但是基尼系數由於沒有對數運算,可大大減少計算開銷。
當然CART相對於ID3,C4.5最大的優勢就是可以處理回歸問題。CART算法處理分類問題時,以葉子節點上樣本投票預測類別,處理回歸問題時,以葉子節點的樣本均值作為預測值。
CART算法的過程如下:
a 計算訓練集所有樣本的基尼系數。
b 計算某一特征下每一屬性划分后左右兩邊的基尼系數,找到基尼系數和最小的划分屬性。
c 將每一個特征均按b中的方法計算,得到每一個特征最佳的划分屬性。
d 對比c中每一個特征的最優划分屬性下的基尼系數和,最小的就是最優的划分特征。
e 按最優的特征及最優屬性划分,得到子節點。
f 在還未被選擇的特征中迭代b-e,直到無特征可分或信息增益率已經無法達到要求的標准時,算法終止。
1.3 兩種算法差異不大對准確率無影響,信息墒的運行效率低一點,因為它有對數運算.一般說使用默認的基尼系數”gini”就可以了,即CART算法。
2. splitter: 特征划分標准
可選best或random,默認為best。
best是在特征的全部划分點中找到最優的划分點,比如基於信息增益分類時,則選擇信息增益最大的特征點。
random是在隨機選擇的部分划分點找到局部最優的划分點,具體是如何隨機選擇的部分划分點的,我也不清楚,這個需要查看源碼才知道。如果你看到了這篇文章,恰好又知道其中原理,不妨留言交流下。
一般在樣本量不大的時候,選擇best,樣本量過大,用random。
3.max_depth:決策樹最大深度
默認為None。
一般來說,數據少或者特征少的時候可以不管這個值。如果模型樣本量多,特征也多的情況下,推薦限制這個最大深度,具體的取值取決於數據的分布。常用的可以取值10-100之間。常用來解決過擬合
4. min_samples_split:內部節點再划分所需最小樣本數
默認為2。
意義:如果節點上的樣本已經低於這個值,則不會再尋找最優的划分點進行划分,且以該結點作為葉子節點。樣本過多的情況下,可以設定一個閾值,具體可根據業務需求和數據量來定。可以輸入一個具體的值(int),或小於1的數(float類型,會根據樣本量計算百分比)。
5.min_samples_leaf:葉子節點所需最少樣本數
默認為1。
意義:如果達不到這個閾值,則同一父節點的所有葉子節點均被剪枝,這是一個防止過擬合的參數。可以輸入一個具體的值(int),或小於1的數(float類型,會根據樣本量計算百分比)。
6.min_weight_fraction_leaf:葉子節點所有樣本權重和
默認為0。
意義:如果低於閾值,則會和兄弟節點一起被剪枝,默認是0,就是不考慮權重問題。這個一般在樣本的分布類別偏差很大,或有較多缺失值的情況下會考慮,這時我們就要注意這個值了。
7.max_features:划分考慮最大特征數
默認為None。
意義:不輸入則默認全部特征,可以選 log2N,sqrt(N),auto或者是小於1的浮點數(百分比)或整數(具體數量的特征)。如果特征特別多時,比如大於50,可以考慮選擇auto來控制決策樹的生成時間。
8.random_state:隨機數生成種子
默認為:None。
意義:設置隨機數生成種子是為了保證每次隨機生成的數是一致的(即使是隨機的);如果不設置,那么每次生成的隨機數都是不同的。
9.max_leaf_nodes:最大葉子節點數
默認為:None。
意義:防止過擬合,默認不限制,如果設定了閾值,那么會在閾值范圍內得到最優的決策樹。
如果特征不多,可以不考慮這個值,但是如果特征分成多的話,可以加以限制,具體的值可以通過交叉驗證得到。
10.min_impurity_decrease:節點划分最小不純度
默認為:0。
意義:這個值限制了決策樹的增長,如果某節點的不純度(基尼系數,信息增益)小於這個閾值,則該節點不再生成子節點。
sklearn 0.19.1版本之前叫 min_impurity_split。
11.class_weight:類別權重
默認為:None。
意義:在樣本有較大缺失值,或類別偏差較大時可選,防止決策樹向類別過大的樣本傾斜。可設定None或者balanced,后者會自動根據樣本的數量分布計算權重,樣本數少則權重高,與min_weight_fraction_leaf對應。
不適用於回歸樹 sklearn.tree.DecisionTreeRegressor
12.Presort:是否排序
默認為:False。
模型參數選擇的幾項建議:
1.樣本少數量但是樣本特征非常多的時候,決策樹很容易過擬合,在擬合決策樹模型前,推薦先做維度規約,比如主成分分析(PCA),特征選擇(Losso)。這樣特征的維度會大大減小。再來擬合決策樹模型效果會好。
在訓練模型先,注意觀察樣本的類別情況(主要指分類樹),如果類別分布非常不均勻,就要考慮用class_weight來限制模型過於偏向樣本多的類別。