編注:本文作者是 Codecademy 的分析主管 Cheng-Tao Chu,其專長是資料探勘和機器學習,之前在 Google、LinkedIn和Square就職。
統計建模非常像工程學。
在工程學中,有多種構建鍵-值儲存系統的方式,每個設計都會構造一組不同的關於使用模式的假設集合。在統計建模中,有很多分類器構建演算法,每個演算法構造一組不同的關於資料的假設集合。
當處理少量資料時,嘗試儘可能多的演算法,然後挑選最好的一個的做法是比較合理的,因為此時實驗成本很低。但當遇到“大資料”時,提前分析資料,然後設計相應“管道”模型(預處理,建模,優化演算法,評價,產品化)是值得的。
正如我之前文章中所指出的,有很多種方法來解決一個給定建模問題。每個模型做出不同假設,如何導引和確定哪些假設合理的方法並不明確。在業界,大多數實踐者是挑選他們更熟悉而不是最合適的建模演算法。在本文中,我想分享一些常見錯誤(不能做的),並留一些最佳實踐方法(應該做的)在未來一篇文章中介紹。
1. 想當然地使用預設損失函式
許多實踐者使用預設損失函式(如,均方誤差)訓練和挑選最好的模型。實際上,現有損失函式很少符合業務目標。以欺詐檢測為例,當試圖檢測欺詐性交易時,業務目標是最小化欺詐損失。現有二元分類器損失函式為誤報率和漏報率分配相等權重,為了符合業務目標,損失函式懲罰漏報不僅要多於懲罰誤報,而且要與金額數量成比例地懲罰每個漏報資料。此外,欺詐檢測資料集通常含有高度不平衡的標籤。在這些情況下,偏置損失函式能夠支援罕見情況(如,通過上、下采樣)。
2.非線性情況下使用簡單線性模型
當構建一個二元分類器時,很多實踐者會立即跳轉到邏輯迴歸,因為它很簡單。但是,很多人也忘記了邏輯迴歸是一種線性模型,預測變數間的非線性互動需要手動編碼。回到欺詐檢測問題,要獲得好的模型效能,像“billing address = shipping address and transaction amount < $50”這種高階互動特徵是必須的。因此,每個人都應該選擇適合高階互動特徵的帶核SVM或基於樹的分類器。
3.忘記異常值
異常值非常有趣,根據上下文環境,你可以特殊關注或者完全忽略它們。以收入預測為例,如果觀察到不同尋常的峰值收入,給予它們額外關注並找出其原因可能是個好主意。但是如果異常是由於機械誤差,測量誤差或任何其它不可歸納的原因造成的,那麼在將資料輸入到建模演算法之前忽略掉這些異常值是個不錯的選擇。
相比於其它模型,有些模型對異常值更為敏感。比如,當決策樹演算法簡單地將每個異常值計為一次誤分類時,AdaBoost演算法會將那些異常值視為“硬”例項,併為異常值分配極大權值。如果一個資料集含有相當數量的異常值,那麼,使用一種具有異常值魯棒性的建模演算法或直接過濾掉異常值是非常重要的。
4.樣本數少於特徵數(n<<p)時使用高方差模型
SVM是現有建模演算法中最受歡迎演算法之一,它最強大的特性之一是,用不同核函式去擬合模型的能力。SVM核函式可被看作是一種自動結合現有特徵,從而形成一個高維特徵空間的方式。由於獲得這一強大特性不需任何代價,所以大多數實踐者會在訓練SVM模型時預設使用核函式。然而,當資料樣本數遠遠少於特徵數(n<<p)—業界常見情況如醫學資料—時,高維特徵空間意味著更高的資料過擬合風險。事實上,當樣本數遠小於特徵數時,應該徹底避免使用高方差模型。
5.尚未標準化就進行L1/L2/等正則化
使用L1或L2去懲罰大系數是一種正則化線性或邏輯迴歸模型的常見方式。然而,很多實踐者並沒有意識到進行正則化之前標準化特徵的重要性。
回到欺詐檢測問題,設想一個具有交易金額特徵的線性迴歸模型。不進行正則化,如果交易金額的單位為美元,擬合係數將是以美分為單位時的100倍左右。進行正則化,由於L1/L2更大程度上懲罰較大系數,如果單位為美元,那麼交易金額將受到更多懲罰。因此,正則化是有偏的,並且趨向於在更小尺度上懲罰特徵。為了緩解這個問題,標準化所有特徵並將它們置於平等地位,作為一個預處理步驟。
6. 不考慮線性相關直接使用線性模型
設想建立一個具有兩變數X1和X2的線性模型,假設真實模型是Y=X1+X2。理想地,如果觀測資料含有少量噪聲,線性迴歸解決方案將會恢復真實模型。然而,如果X1和X2線性相關(大多數優化演算法所關心的),Y=2*X1, Y=3*X1-X2或Y=100*X1-99*X2都一樣好,這一問題可能並無不妥,因為它是無偏估計。然而,它卻會使問題變得病態,使係數權重變得無法解釋。
7. 將線性或邏輯迴歸模型的係數絕對值解釋為特徵重要性
因為很多現有線性迴歸量為每個係數返回P值,對於線性模型,許多實踐者認為,係數絕對值越大,其對應特徵越重要。事實很少如此,因為:(a)改變變數尺度就會改變係數絕對值;(b)如果特徵是線性相關的,則係數可以從一個特徵轉移到另一個特徵。此外,資料集特徵越多,特徵間越可能線性相關,用係數解釋特徵重要性就越不可靠。
這下你就知道了機器學習實踐中的七種常見錯誤。這份清單並不詳盡,它只不過是引發讀者去考慮,建模假設可能並不適用於手頭資料。為了獲得最好的模型效能,挑選做出最合適假設的建模演算法—而不只是選擇你最熟悉那個演算法,是很重要的。