當前位置:
首頁 > 最新 > 樹模型的共線性問題

樹模型的共線性問題

有一段時間沒有更新公眾號了。小編最近用決策樹比較多。今天打算更新一篇決策樹的文章。之前有個人和小編談到過決策樹,記得他說決策樹也需要考慮多重共線性的問題。就這個問題小編在本文也會給出自己的看法。當然了,本文的大部分內容來源於網路。

決策樹是一種非參數的監督學習演算法,既可以用於分類問題,也可以用於回歸問題,還經常被用於各種集成學習演算法(如隨機森林,xgboost,gbdt等)。決策樹模型非常簡單,它們是一種樹狀判斷的結構,可以用一些簡單 if-else-then 來表述。

雖然原理簡單,但決策樹可以變得很複雜。從下面這個圖可以看出,決策樹甚至可以用來擬合正弦曲線,樹越深,擬合結果越精細。

其中,ID3 演算法通過使用信息增益作為選擇分裂屬性的準則來構建多叉樹,但只支持分類型的屬性,並且容易選擇取值多的屬性分裂。

C4.5演算法是ID3演算法的改進版,使用信息增益率準則選擇分裂屬性,屬性可以是分類型,也可以是數值型的,同時還支持缺失值和剪枝處理。C4.5之後還有個C5.0,是個商用版,小編不太熟,這裡提一下,感興趣的同學可以研究一下。

CART演算法和C4.5也比較類似,但它的結構是二叉樹而非多叉樹,並且支持回歸問題。它使用的是Gini指數作為屬性的選擇準則,屬性也支持分類型,數值型,缺失值,支持剪枝。

python的sklearn庫實現的是改進的CART決策樹演算法(可以使用信息增益和gini做準則),但只接受數值型變數輸入。主要有兩個類,DecisionTreeClassifier 和 DecisionTreeRegressor。

DecisionTreeClassifier主要用於分類問題,訓練完成後可以用 export_graphviz 來可視化。除了二分類,還支持多分類,同學們遇到多分類問題時可以試試。

DecisionTreeRegressor用於回歸問題,比如前文中用來解決正弦函數回歸的問題。


優點:

簡單易理解,具有很好的解釋性,能夠可視化。

無需過多的數據預處理操作。

訓練模型的演算法複雜度與數據集大小是log的關係。

支持分類型變數和數值型變數,不過sklearn只支持數值型的X。

屬於白盒模型,可以通過很簡單的布爾邏輯表述。

當對數據源的假設受到破壞時,也有比較好的效果。

缺點:

容易過擬合,可以通過剪枝來減輕,在sklearn里,可以調節最大深度max_depth,葉子節點數max_leaf_nodes,葉節點最小樣本數min_samples_leaf等參數。

不穩定,容易受干擾。

不是全局最優,而是啟發式演算法得到的局部最優。

難以學習複雜概念。

在正負樣本不均衡的情況下,決策樹偏差會很大。

下面我們來討論下決策樹的共線性問題,當小編聽說決策樹還需要考慮共線性的問題時,小編是表示懷疑的。

下面我們就用實際代碼,做個實驗來看看,到底決策樹需要不需要考慮共線性。

生成數據集

看下相關性:

x1和x2的相關性太強了有沒有?先看下不管共線性,建出的模型能有多差。

效果還好。那如果要考慮共線性,保留x1,刪除x2建模:

模型效果顯然很差。再看保留x2,刪除x1建模效果:

效果同樣不行。

小編得出的結論是,決策樹這類樹模型不同於邏輯回歸、線性回歸這類線性模型,它是一類無參數的模型,對屬性間的獨立性或相關性不做什麼假設,也就無需考慮什麼多重共線性啦。當然,這也是小編的一些個人觀點,如果大家有問題,歡迎一起討論。謝謝大家的支持~~


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 SAS中文論壇 的精彩文章:

淚目!他用人工智慧「留住」去世老爸

TAG:SAS中文論壇 |