5.2 決策樹的基本流程可以簡單概括為:
5.3 DecisionTreeClassifier參數之random_state & splitter
random_state用來設置分枝中隨機模式的參數,默認為none,在高維度時隨機性會表現更明顯。輸入任意整數,會壹直長出同壹棵樹,讓模型穩定下來。
splitter有兩種輸入值,輸入”best",決策樹在分枝時雖然隨機,但是還是會優先選擇更重要的特征進行分枝(重要性可以通過屬性feature_importances_查看),輸入“random",決策樹在分枝時會更加隨機,樹會因為含有更多的不必要信息而更深更大,並因這些不必要信息而降低對訓練集的擬合。這也是防止過擬合的壹種方式。當妳預測到妳的模型會過擬合,用這兩個參數來幫助妳降低樹建成之後過擬合的可能性。當然,樹壹旦建成,我們依然是使用剪枝參數來防止過擬合。
5.4 剪枝參數
我們收集的樣本數據不可能和整體的狀況完全壹致,因此當壹棵決策樹對訓練數據有了過於優秀的解釋性,它找出的規則必然包含了訓練樣本中的噪聲,並使它對 未知數據 的擬合程度不足。(過擬合指的是在訓練集上表現很好,在測試集上卻表現糟糕)
為了讓決策樹有更好的泛化性,我們要對決策樹進行剪枝。剪枝策略對決策樹的影響巨大,正確的剪枝策略是優化決策樹算法的核心。sklearn為我們提供了不同的剪枝策略:
5.4.1 max_depth
限制樹的最大深度,超過設定深度的樹枝全部剪掉。這是用得最廣泛的剪枝參數,在高維度低樣本量時非常有效。
5.4.2 min_samples_leaf
min_samples_leaf 限定,壹個節點在分枝後的每個子節點都必須包含至少min_samples_leaf個訓練本,否則分枝就不會發生,或者分枝會朝著滿足每個子節點都包含min_samples_leaf個樣本的方向去發生。壹般搭配max_depth使用,在回歸樹中有神奇的效果,可以讓模型變得更加平滑。這個參數的數量設置得太小會引起過擬合,設置得太大就會阻止模型學習數據。壹般來說,建議從=5開始使用。如果葉節點中含有的樣本量變化很大,建議輸入浮點數作為樣本量的百分比來使用。對於類別不多的分類問題,=1通常就是最佳選擇。
5.4.3 min_samples_split
min_samples_split限定,壹個節點必須要包含至少min_samples_split個訓練樣本,這個節點才允許被分枝,否則分枝就不會發生。
5.4.4 max_features
max_features限制分枝時考慮的特征個數,超過限制個數的特征都會被舍棄。和max_depth異曲同工,max_features是用來限制高維度數據的過擬合的剪枝參數,但其方法比較暴力,是直接限制可以使用的特征數量而強行使決策樹停下的參數,在不知道決策樹中的各個特征的重要性的情況下,強行設定這個參數可能會導致模型學習不足。如果希望通過降維的方式防止過擬合,建議使用PCA,ICA或者特征選擇模塊中的降維算法。
5.4.5 min_impurity_decrease
min_impurity_decrease限制信息增益的大小,信息增益小於設定數值的分枝不會發生。這是在0.19版本種更新的功能,在0.19版本之前時使用min_impurity_split。
5.4.6 確認最優的剪枝參數
我們要使用確定超參數的曲線來進行判斷了,繼續使用我們已經訓練好的決策樹模型clf。超參數的學習曲線,是壹條以超參數的取值為橫坐標,模型的度量指標為縱坐標的曲線,它是用來衡量不同超參數取值下模型的表現的線。在我們建好的決策樹裏,我們的模型度量指標就是score。
5.5 目標權重參數
5.5.1 class_weight
完成樣本標簽平衡的參數。樣本不平衡是指在壹組數據集中,標簽的壹類天生占有很大的比例。因此我們要使用class_weight參數對樣本標簽進行壹定的均衡,給少量的標簽更多的權重,讓模型更偏向少數類,向捕獲少數類的方向建模。該參數默認None,此模式表示自動給與數據集中的所有標簽相同的權重。
5.5.2 min_weight_fraction_leaf
有了權重之後,樣本量就不再是單純地記錄數目,而是受輸入的權重影響了,因此這時候剪枝,就需要搭配min_ weight_fraction_leaf這個基於權重的剪枝參數來使用。如果樣本是加權的,則使用基於權重的預修剪標準來更容易優化樹結構,這確保葉節點至少包含樣本權重的總和的壹小部分。
5.6 紅酒數據實例
1)加載紅酒數據集
2)查看標簽數據
3)查看標簽名稱
4)劃分訓練集和測試集,random_state可以使拆分出的訓練集、測試集是相同的
5)建立決策樹,訓練模型
6)導出決策樹結構
7)查看每個特征的重要性