機器學習中容易犯下的錯
前言
在工程中,有多種方法來構建一個關鍵值存儲,并且每個設計都對使用模式做了不同的假設。在統計建模,有各種算法來建立一個分類,每一個算法的對數據集有不同的假設。
在處理少量的數據時,盡量多的去嘗試更多的算法是合理的,并且去 選擇***的算法建立在實驗成本低的情況下。但是,當我們碰到“大數據”時,就需要對數據進行前期分析,然后相應的設計建模流程。(例如預處理、建模、優化算法、評價,產品化)
現在出現了很多的算法,而且有幾十種方法來解決給定的建模問題。每個模型假設不同的東西,如何使用和驗證哪些假設是否合理的其實并不明顯。在工業中,大多數從業者選擇的建模算法,都是他們最熟悉的,而不是選擇一個最適合數據的。接下來,我來分享一些經常我們會忽略并犯錯的地方,謝謝大家指正點評!( 注:標題就用英語,感覺更貼近機器學習算法的原意 )
1. Take default loss function for granted(理所當然的采用默認損失函數)
損失函數 是一個機器學習算法的核心,損失函數決定了最終優化后得到的參數以及模型本身。在不同的業務場景下,優化的目標應該是不同的。許多從業者訓練和選擇***的模型,使用默認的損失函數(比如:均方誤差)。在實踐中,現成的損失函數很少與商業目標相一致。以詐騙偵查為例。當試圖檢測欺詐交易,商業目標是盡量減少欺詐損失。現有的二元分類器的損失函數同樣衡量假陽性和假陰性。為了與商業目標一致,損失函數不僅要懲罰假陰性多于假陽性, 但也懲罰每個假陰性與美元金額的比例。
此外,數據集在欺詐檢測通常包含高度不平衡的標簽。在這種情況下,偏置的損失函數有利于罕見的情況下(例如:通過上/下采樣)。
2. Use plain linear models for non-linear interaction(純線性模型用于非線性相互作用)
這個同樣是經常會犯的錯誤。當構造一個二分類問題,很多人就會直接想到Logistic回歸, 原因很簡單,因為邏輯回歸效率高,實現容易。但是,大家往往都忽略了一點,邏輯回歸本身就是一個線性模型,且非線性相互作用之間的預測需要手動編碼。但是,真實數據是否線性可分卻是我們未知的情況。由于高維數據下判斷數據是否線性可分幾乎是一個不現實的任務,所以個人的經驗往往是先使用邏輯回歸做一次分類,但是同時也會采用決策樹,或者SVM等非線性模型來對該數據進行重新的分類比對。
返回欺詐檢測,高階交互特征如:“賬單地址=發貨地址和交易金額 < $50”需要良好的模型性能。因此,人們應該喜歡非線性模型,如SVM核函數或基于樹的分類,有益于高階交互特征。
3. Forget about outliers(忽略異常值)
異常值是個很有趣的事情,讓你又愛又恨。根據上下文,他們要么值得特別關注,要么完全忽略。以收入預測為例。如果觀察到不同尋常的收入高峰,這可能是一個好主意,要格外注意他們,找出什么原因引起的尖峰。但如果異常是由于機械誤差,測量誤差或其他造成則不適用,在將數據反饋到建模算法之前,濾除這些異常值是個好主意。
有些模型比其他更敏感異常值。例如,AdaBoost可以把這些異常值作為“難樣本(Hard)”的情況下,把較大的權重放在異常值,而決策樹可以簡單地計算每個異常值作為一個錯誤分類。如果數據集包含了大量的異常值,著重的是,要么用魯棒的模型算法去針對異常值,要么濾除異常值。
注:參考他人一段話。
我記得之前在統計之都上看過一篇文章對我啟發很大,說曾經我們都愿意把異常值直接給丟掉,但是我們卻忘記了異常值并非錯誤值,而同樣是真實情況的表現,我們之所以認為異常,只是因為我們的數據量不足夠大而已。文中還舉了一個例子,說我們用計算機來模擬高斯分布,也一樣會模擬出一些數據點落在N個標準差之外,而我們并不能說這是異常點,因為如果我們把這些點刪除掉,這就不是一個高斯分布了。所以異常值很多情況下非但不能丟掉,還需要引起我們的足夠重視和分析。
但是我們又要注意這個異常值是否是錯誤值,如果是錯誤值,這個時候我們就應該想辦法把這些錯誤值去掉,因為這些錯誤往往會影響我們實際的模型效果。如果當訓練數據中包含一些異常值的時候,我們就需要考慮模型的敏感性了,例如AdaBoost, Kmeans這種就屬于對異常值很敏感的機器學習模型。
4. Use high variance model when n<<p(高方差模型使用情況)
支持向量機是***的現有建模算法之一,其***大的功能之一是能夠適應不同核函數的模型。SVM核函數可以被認為是一種方法,自動結合現有的特征去 形成一個更豐富的特征空間。由于這個簡單,大多數都會在訓練SVM模型的時候默認使用核函數。然而,當數 據n<<p(樣本數目 << 特征數目),常見于醫療數據等行業,更豐富的特征空間意味著有更高的風險過擬合數據。事實上,高方差模型應完全避免(n<<p)。
注: SVM核函數的一個關鍵概念就是維度提升,如果當n << p的時候,還依然采用SVM來選定模型,那么就必然會導致p進一步增加,于是導致特征的參數中自由變量增加,必然會對分類的效果產生很大的影響。
5. L1/L2/… regularization without standardization(正則化前沒有標準化)
應用 L1或L2去懲罰 較大系數是常用的方式去正則化線性或邏輯回歸。然而,許多人不知道應用這些正則化之前特征標準化的重要性。
返回欺詐檢測,想象一個具有交易量特征的線性回歸模型。沒有正則化,如果交易金額單位為美元,擬合系數將是約100倍大于 如果該單位是美分的 擬合系數。有正則化,由于L1 / L2懲罰更大的系數, 如果單位是美元 交易金額將受到懲罰。因此,正規化是有偏見的,往往傾向于懲罰小規模特征。為了緩解這個問題,標準化的所有特征,并把它們作為一個預處理步驟。
6. Use linear model without considering multi-collinear predictors(使用線性模型沒有考慮共線預測)
設想建立一個具有兩個變量X1和X2的線性模型,假設真實模型是y = X1+X2。理想情況下,如果觀察到的數據有少量的噪聲,線性回歸解將找回真實模型。然而,如果X1和X2共線,大多數優化算法的關系,y=2*X1, y=3*X1-X2或y=100*X1-99*X2都是不錯的。
這個問題可能不是有害的,因為它沒有偏差估計。然而,它確實會使問題成為病態,并且使系數權重無法解釋。
7. Interpreting absolute value of coefficients from linear or logistic regression as feature importance
因為許多現有的線性回歸返回的p-value
系數的P值返回每個,
許多人認為線性模型,系數的絕對值越大,對應的特征越重要。這很少是真實的,因為:
改變了變量的規模,就改變了系數說的絕對值;
如果特征是共線的,系數可以從一個特征轉移到其他。
此外,數據集有更多的特征,有更多的可能特征共線,用系數解釋特征重要性的可靠性較差。