特征共线性问题
多重共線性是使用線性回歸算法時經常要面對的一個問題。在其他算法中,例如決策樹或者樸素貝葉斯,前者的建模過程時逐漸遞進,每次都只有一個變量參與,這種機制含有抗多重共線性干擾的功能;后者假設變量之間是相互獨立的。但對于回歸算法來說,都要同時考慮多個預測因子,因此多重共線性不可避免。
多重共線性(Multicollinearity)是指線性回歸模型中的自變量之間由于存在高度相關關系而使模型的權重參數估計失真或難以估計準確的一種特性,多重是指一個自變量可能與多個其他自變量之間存在相關關系。
1.?LR中的共線性問題和解決方法
假設k個自變量的多元線性回歸模型:
利用最小二乘法可得到參數的估計為:
如果X不是滿秩的話,會有無窮多個解。如果變量之間存在共線性,那么X近乎是不滿秩的,XTX近乎是奇異的。
從統計學的角度來看:
如果方差膨脹因子很大,也就是相關系數R趨向1的時候,方差就會變得異常大。
解決辦法可以有:
- PCA等降維方法。因為在原始特征空間中變量之間相關性大,很容易想到通過降低維度的形式來去除這種共線性。
- 正則化。使用嶺回歸(L2)或者lasso回歸(L1)或者elasticnet回歸(L1+L2)
- 逐步回歸法
特征共線性不影響模型的預測效果只要模型能夠最終收斂,但是這個答案的前提假設是輸入的數據是理想化的,不存在噪聲的,然而實際應用工程中這是不太可能的,總會有一部分特征帶有噪聲,有可能是etl工程師的疏忽,有可能是數據來源受到了污染,這個問題在一些銀行領域的業務中比較典型:
例如,現在許多銀行系的金融科技子公司都開始漸漸使用一些機器學習的算法來對信貸風控進行建模,經常會涉及到對第三方數據的購買,我們假設從A、B、C三個渠道獲取了3個特征,使用邏輯回歸,標簽為信用不良用戶與信用優良用戶的二分類問題,假設這個3個特征之間相關性很強,我們直接使用lr建模,模型收斂,通過oot,上線,嗯,第一個季度效果不錯,到了第二個季度,模型需要進行迭代,結果A公司數據庫工程師刪庫跑路了,A公司也沒做備份,啥數據都拿不出來,得,這個月的A特征全是缺失值,模型不好迭代了,做個插補吧,誤差太大,不做吧,又沒法迭代,尷尬。 如果一開始考慮到特征之間相關性強的問題,刪除了A、B這兩特征留下C,那么這種問題的出現所帶來的影響相對就要小的多了。
相關性強的特征如果同時建模,潛在的實際上是增大了模型受噪聲干擾的面,還是上面強相關的A、B、C三個特征的例子,假設A、B、C三者收到噪聲干擾的概率都是0.05,則當僅使用其中一個特征的時候,受到噪聲干擾的概率為0.05,如果選擇了3個特征,則受到噪聲干擾的概率為1-0.95*0.95*0.95約為0.143,結果兩種方案得到的模型的效果還差不多。
2. 為什么樹模型對特征之間的共線性不強調呢?
在統計分析中,作推斷時,如果自變量存在共線性,將無法區分它們對因變量的影響,因此無法對結果進行清楚的解釋。但是有時候做預測(prediction)時,我們并不關心如何解釋自變量對因變量的影響。GBDT、神經網絡 也更像一個black-box,很適合做預測分析。(共線性不影響模型的預測而是影響對模型的解釋),但是在一些特定的領域,比如金融,從業人員是非常強調模型的可解釋性的,因為模型可解釋就可以和從業人員的先驗知識形成一個比較好的互補,從而提高模型的有效性。做預測時,往往用貪婪算法進行變量選擇,只有新變量對結果影響比較大時,才會被加入到模型中,因此,在step-wise variable selection的過程中,共線性的變量只有一個會被選入到模型中。在決策樹模型中,每一個樹的構建都是貪婪的,因此,冗余的特征并不會被加入模型中,也就是說如果變量之間相關性非常強最終很可能只會選擇部分進入模型。
3.?為什么會在訓練的過程當中將高度相關的特征去掉?
- 去掉高度相關的特征會讓模型的可解釋性更好
- 可以大大提高訓練的速度。如果模型當中有很多特征高度相關的話,就算損失函數本身收斂了,但實際上參數是沒有收斂的,這樣會拉低訓練的速度。其次是特征多了,本身就會增大訓練的時間。
- 用lgb來基于自身特征重要性做特征選擇的時候,共線性是一個非常致命的問題,因為共線性會導致一些相關性高但是重要性高的特征在特征選擇的過程中被排除掉,一開始是因為使用了特征重要性作為特征篩選的方法發現最終的泛化效果反而差了,最后仔細排查才發現了共線性的問題,因為有三個特征的相關性太高,訓練的時候,每一顆樹都是從這3個特征中隨機選擇一個,而選完了一個之后,另外兩個由于相關度太高的問題,在下一次分裂的時候往往沒有辦法帶來大的增益了(因為已經被選中的特征搶先分裂了),所以最終的結果就是,3個強大的特征最終的分裂次數或者分裂增益值都很小,看起來好像不是很重要的樣子所以,在實際的過程中,還是建議要把特征相關性考慮進去,免得出現各種各樣意想不到的幺蛾子。。。
- 最后一點的內容我在下面這幅圖的段落中已經陳述過了,不要以為gbdt就可以為所欲為!
?
參考知乎:https://zhuanlan.zhihu.com/p/70124378?from_voters_page=true
?
?
?
總結
- 上一篇: TCP-Traceroute 核心代码
- 下一篇: 如何成为好的程序员