初學者在從事機器學習或數據科學項目時經常會遇到一些常見的錯誤?在這里我們列出這些最常見的錯誤。
在機器學習中,構建產品或解決方案的方法有很多,每種方式的假設情況都不一樣。很多時候,瀏覽和識別哪些假設是合理的不是很容易。剛剛接觸機器學習的人都會犯錯誤,而事后看來往往會感到不應該。本文創建了新手機器學習工程師制作的一些常犯的錯誤清單。希望你能從這些常見錯誤中吸取教訓,并創造更多可靠的解決方案,從而帶來真正的價值。
將默認損失函數視為理所當然
在剛剛入門的時候,均方誤差非常好,可以說這是一個驚人的默認設置,但是對于真實世界的應用程序來說,這種未經專門設計的損失函數很少能給出最優解。
以欺詐檢測為例。為了與業務目標保持一致,你真正想要的是按照由于欺詐而損失的美元金額成比例地懲罰漏報。而使用均方誤差可能會給你良好的結果,但永遠不會給你當前最先進的結果。
成為機器學習工程師|第3步:選擇你的工具看看這篇文章,了解你可以使用的不同的ML工具。
要點:始終建立一個與你的解決方案目標非常吻合的自定義損失函數。
針對所有問題使用一種算法/方法
許多人將完成他們的第一個教程,并立即開始使用他們可以想象的每個用例中學到的相同算法。這是很熟悉的,他們認為它可以像任何其他算法一樣工作。這是一個錯誤的假設,并且可能會導致糟糕的結果。
讓你的數據為你選擇模型。對數據進行預處理后,將其輸入許多不同的模型并查看結果。你將會很好地了解哪些模型最適合工作,哪些模型效果不佳。
成為機器學習工程師|第2步:選擇一個流程查看這篇文章,并掌握你的流程。
要點:如果你發現自己一遍又一遍地使用相同的算法,這可能意味著你沒有得到最好的結果。
忽略離群值
基于上下文,離群值可能很重要或者完全忽略。以污染預測為例,空氣污染可能會出現大的峰值,最好看看它們并理解它們發生的原因。在由某種類型的傳感器錯誤引起的異常情況下,忽略它們并從數據中刪除是安全的。
從模型角度來看,有些人對異常值比其他人更敏感。以Adaboost為例,它對離群值賦予極大的權重,而決策樹可能只是簡單地將每個異常值視為一個錯誤的分類。
成為機器學習工程師|第2步:選擇一個流程,通過最佳實踐來避免這種錯誤
要點:在開始工作之前,始終密切關注你的數據,并確定是否忽略離群值或仔細查看離群值
沒有正確處理周期性特征
一天中的小時、一周中的幾天、一年中的幾個月以及風向都是周期性特征的例子。許多新的機器學習工程師不認為可以將這些功能轉換為可以保留諸如23小時和0小時等彼此靠近且不遠的信息的表示。
以小時為例,處理這個問題的最好方法是計算sin和cos分量,以便將你的循環特征表示為(x,y)圓的坐標。在這個表示小時內,23和0小時在數字上是緊挨著的,就像它們應該是一樣。
很多人都要求提供代碼示例:在這里(https://gist.github.com/anonymous/7ce6274c630dabd70960c6d7fdd6c580)
要點:如果你有周期性的功能,而且你沒有轉換它們,那么你就開始使用模型垃圾數據。
沒有標準化的L1 / L2正規化
L1和L2正則化懲罰大系數,是調整線性或邏輯回歸的常用方法,然而,許多機器學習工程師在應用正則化之前并不知道這對于標準化功能很重要。
想象一下,你有一個線性回歸模型,其中一個交易是一個特征。將所有功能標準化并將其放在平等的地位,這樣正規化在所有功能中都是一樣的。
要點:正則化是偉大的,但如果你沒有標準化的功能可能會比較麻煩
將線性或邏輯回歸的系數解釋為特征重要性
線性回歸函數通常為每個系數返回p值。很多時候,這些系數使新手機器學習工程師認為對于線性模型,系數值越大,特征越重要。由于變量的大小會改變系數的絕對值,所以這種情況幾乎不存在。如果特征是共線的,則系數可以從一個特征轉移到另一個特征。數據集的特征越多,特征共線性的可能性就越大,而對特征重要性的簡單解釋就越不可靠。
要點:了解哪些特征對結果影響大是很重要的,但不要假設可以查看系數。他們經常不講述整個“故事”。
做幾個項目并取得好成績可能會贏得一百萬美元。你努力工作,結果證明你做得很好,但和其他行業一樣,魔鬼藏在細節中,甚至幻想的情節都可以隱藏偏見和錯誤。這份清單并不意味著詳盡無遺,而僅僅是為了讓讀者思考可能隱藏在解決方案中的所有小問題。為了取得良好的效果,重要的是要遵循你的流程,并且要經常仔細檢查你是否犯了一些常見的錯誤。
如果你發現這篇文章有用,你會從我的機器學習工程師|第2步中獲得很多:選擇流程文章。它可以幫助你解決一個過程,使你能夠捕捉更簡單的錯誤并獲得更好的結果。