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