機器學習新手工程師常犯的6大錯誤
機器學習中有很多構建產品或解決方案的方式,每種方式的假設情況都不一樣。很多時候,如何找到合理的假設并不容易。機器學習初學者經常會犯一些事后覺得蠢爆了的錯誤。本文作者創建了一個機器學習新手工程師常犯的錯誤清單。希望大家可以從中學習,創建更棒的解決方案。
理所當然地使用默認損失函數
在剛入門的時候,均方誤差作為損失函數是很好的默認選擇。但是當需要處理現實問題的時候,這種未經專門設計的損失函數很少能給出***解。
拿欺詐檢測為例。為了與你真正的商業目標一致,需要按照欺詐造成的損失美元金額的比例懲罰假負類。使用均方誤差能給你一個還不錯的結果,但不會是當前***的結果。
要點:每一次都自定義損失函數,使之緊密匹配你的目標。
對所有問題都使用一種算法/方法
很多人一旦完成了入門教程之后,就開始在所有的案例中都使用同一種算法。這很常見,他們覺得這種算法的效果和其它算法是一樣的。這種假設是很糟糕的,最終會帶來很差的結果。
解決辦法是讓數據為你選擇模型。當你把數據預處理之后,將其饋送到多個不同的模型中去,看看結果如何。你將會了解哪些模型最適用,而哪些模型并不適合。
要點:如果你一直使用同一種算法,這可能意味著你的結果并不是***的。
忽略異常值
異常值有時候很重要,有時候又可以忽略不計,視情況而定。以收入預測為例,有時候收入會突然出現很大的變動,觀察這種現象并了解其原因是很有幫助的。有時候異常值由某種誤差造成,那么這時可以放心地忽略它們,并將其從你的數據中刪除。
從模型的角度來看,有些模型對異常值更加敏感。以 Adaboost 為例,它會將異常值當做重要的例子,并給予異常值極大的權重,而決策樹可能只是簡單的把異常值當做一個錯誤分類(false classification)。
要點:每一次開始工作之前,先仔細觀察數據,決定異常值是否應該被忽略,如果無法決定,就更仔細地觀察。
未正確處理周期特征
一天 24 小時、一周七天、一年 12 個月,以及風向都是周期特征。很多機器學習新手工程師不知道把這些特征轉換成表示能夠保存信息,如 23 時和 0 時很接近。
以小時為例,***處理方式是計算它的 sin 和 cos,這樣你可以將該周期特征表示為一個圓的 (x,y) 坐標。在以這種方式表示的時間中,23 時和 0 時就是在數值上緊挨著的兩個數,僅此而已。
要點:如果你在研究中遇到周期特征,但沒有將其轉換成表示,那你就是在給模型添加垃圾數據。
未經歸一化的 L1/L2 正則化
L1 和 L2 正則化懲罰較大的系數,是一種對線性或 logistic 回歸進行正則化的常用方式。但是,很多機器學習工程師沒有意識到使用正則化之前對特征進行歸一化的重要性。
假設你有一個線性回歸模型,其中一個特征是「交易金額」。如果交易金額的單位是美元,那么它的系數應該是單位為美分的系數的 100 倍。這可能會引起偏差,使模型懲罰實際較小的特征。為了避免該問題,需要將這些特征進行歸一化,這樣正則化對于所有特征都是平等的。
要點:正則化很好用,但是如果你不把特征歸一化,會出現很讓人頭疼的問題。
把線性回歸或 logistic 回歸的系數絕對值當作判斷特征重要性的依據
很多現成的線性回歸器為每個系數返回 p 值,一些機器學習新手工程師認為對于線性模型而言,系數的值越大,則該特征越重要。這并不準確,因為變量的大小會改變系數的絕對值。如果特征是共線的,則系數可以從一個特征轉換到另一個特征。數據集的特征越多,特征是共線的可能性就越大,這種對特征重要性的簡單解釋的可信度就越低。
要點:了解哪些特征對結果的影響力***非常重要,但是僅憑系數無法確定。
做一些項目并且獲得好的結果,感覺就像贏了一百萬!你努力工作,研究結果證明你做的不錯,但是和任何行業一樣,魔鬼總是隱藏在細節中,精密的圖表也可能隱藏偏差和誤差。本文列出的錯誤并不是全部,只是想刺激讀者思考你的解決方案中可能隱藏哪些細微問題。要想獲取好的結果,按照流程工作很重要,并且仔細檢查確保不犯常見錯誤。
原文:
https://medium.com/towards-data-science/top-6-errors-novice-machine-learning-engineers-make-e82273d394db
【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】