無論是 Kaggle 競賽還是工業部署,機器學習模型在搭建起來之后都面臨著無盡的調優需求。在這個過程中我們要遵循怎樣的思路呢?
如果準確性不夠,機器學習模型在真實世界就沒有什么實用性了。對于開發者們來說,如何提高性能是非常重要的工作,本文將介紹一些常用策略,包括選擇最佳算法、調整模型設置和特征工程。 如果你學習過正確的教程,很快就能訓練起自己的第一個機器學習模型。然而想要在第一個模型上跑出很好的效果是極難的。在模型訓練完后,我們需要花費大量時間進行調整以提高性能。不同類型的模型有不同的調優策略,在本文中,我們將介紹模型調優的常用策略。 模型好不好? 在模型調優之前,我們首先需要知道現在的模型性能是好是壞。如果你不知道如何衡量模型的性能,可以參考:
https://www.mage.ai/blog/definitive-guide-to-accuracy-precision-recall-for-product-developers
https://www.mage.ai/blog/product-developers-guide-to-ml-regression-model-metrics
每個模型都有基線指標。我們可以使用「模式類別」作為分類模型的基線指標。如果你的模型優于基準線,那么恭喜你,這是一個好的開始。如果模型能力還沒有達到基準水平,這說明你的模型還沒有從數據中獲得有價值的見解(insight)。為了提高性能,還有很多事情要做。 當然還有一個情況就是模型的表現「太過優秀」了,比如 99% 的準確率和 99% 的召回率。這并不是什么好事,可能表示你的模型存在一定的問題。一個可能的原因是「數據泄露」,我們將在「消除數據泄漏功能」部分討論如何解決此問題。 改進模型的策略 一般來說,模型調優有 3 個方向:選擇更好的算法,調優模型參數,改進數據。 比較不同算法 比較多個算法是提高模型性能的一個簡單的想法,不同的算法適合不同類型的數據集,我們可以一起訓練它們,找到表現最好的那個。例如對于分類模型,我們可以嘗試邏輯回歸、支持向量機、XGBoost、神經網絡等。
圖源:https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html 超參數調優 超參數調優是一種常用的模型調優方法。在機器學習模型中,學習過程開始之前需要選擇的一些參數被稱為超參數。比如決策樹允許的最大深度,以及隨機森林中包含的樹的數量。超參數明顯影響學習過程的結果。調整超參數可以讓我們在學習過程中很快獲得最佳結果。
我們非常建議使用公開可用的庫幫助進行超參數調整,例如 optuna。 用召回率換精度 對于分類模型,我們通常用 2 個指標來衡量模型的性能:精度和召回率。根據問題的不同,你可能需要優化召回率或精度中的一個。有一種快速的方法來調整模型以在兩個指標之間進行權衡。分類模型預測標簽類別的概率,因此我們可以簡單地修改概率閾值來修改召回率和精度。 例如,如果我們建立一個模型來預測乘客在泰坦尼克號沉船事故中是否生還,該模型可以預測乘客生還或死亡的概率。果概率高于 50%,模型將預測乘客會幸存,反之乘客死亡。如果我們想要更高的精度,我們可以增加概率閾值。然后,該模型將預測較少的乘客幸存,但會更精確。
特征工程 除了選擇最佳算法和調優參數外,我們還可以從現有數據中生成更多特征,這被稱為特征工程。 創建新的特征 構建新的特征需要一定的領域知識和創造力。這是一個構建新特征的例子:
創建一個功能來計算文本中的字母數。
創建一個功能來計算文本中的單詞數。
創建一個理解文本含義的特征(例如詞嵌入)。
過去 7 天、30 天或 90 天的聚合用戶事件計數。
從日期或時間戳特征中提取「日」、「月」、「年」和「假期后的天數」等特征。
使用公共數據集來增加訓練數據 當你窮盡從現有數據集中生成新特征的想法時,另一個想法是從公共數據集中獲取特征。假如你正在構建一個用來預測用戶是否會轉換為會員的模型,可用的數據集中卻沒有太多的用戶信息,只有「電子郵件」和「公司」屬性。那么你就可以從第三方獲取用戶和公司以外的數據,如用戶地址、用戶年齡、公司規模等等,這些數據可以用于豐富你的訓練數據。
特征選擇 添加更多特征并不總是好的。去除不相關和嘈雜的特征有助于減少模型訓練時間并提高模型性能。scikit-learn 中有多種特征選擇方法可以用來去除不相關的特征。 刪除數據泄露(data leakage)特征 正如上文提到的,一種場景是模型的性能「非常好」。但是在部署模型并在生產中使用這些模型時,性能會變得很差。造成這個問題的原因可能是「數據泄露」,這是模型訓練的一個常見陷阱。數據泄露是指使用一些發生在目標變量之后的特征,并包含目標變量的信息。然而現實生活中的預測不會有那些數據泄露特征。 例如想要預測用戶是否會打開電子郵件,特征可能就包括用戶是否點擊了電子郵件。模型一旦看到用戶點擊了它,那么就預測用戶 100% 會打開它。然而在現實生活中,我們無法知道是否有人在打開電子郵件之前沒有點擊它。 我們可以使用 SHAP 值 debug 數據泄露問題,用 SHAP 庫繪制圖表可以顯示出影響最大的特征以及它們如何定向影響模型的輸出。如果特征與目標變量高度相關并且權重非常高,那么它們可能是數據泄露特征,我們可以將它們從訓練數據中刪除。
更多數據 獲取更多訓練數據是提高模型性能一種明顯而有效的方法。更多的訓練數據能夠讓模型找到更多見解,并獲得更高的準確率。
那么,什么時候該停止調優了? 你需要知道如何開始,也需要知道在何時停止,很多時候怎樣才算足夠是一個難以回答的問題。模型的提升仿佛是無限的,沒有終點:總會有新想法帶來新數據、創建新功能或算法的新調整。首先,最低限度的標準是模型性能至少應優于基線指標。一旦滿足了最低標準,我們應該采用以下流程來改進模型并判斷何時停止:
嘗試所有改進模型的策略。
將模型性能與你必須驗證的其他一些指標進行比較,以驗證模型是否有意義。
在進行了幾輪模型調整后,評估一下繼續修改和性能提升百分點之間的性價比。
如果模型表現良好,并且在嘗試了一些想法后幾乎沒有繼續改進,請將模型部署到生產過程中并測量實際性能。
如果真實條件下的性能和測試環境中類似,那你的模型就算可以用了。如果生產性能比訓練中的性能差,則說明訓練中存在一些問題,這可能是因為過擬合或者數據泄露。這意味著還需要重新調整模型。
結論 模型調優是一個漫長而復雜的過程,包含模型的重新訓練、新想法的試驗、效果評估和指標對比。通過本文介紹的思路,希望你可以將自己的機器學習技術提升到更高的水平。
審核編輯 :李倩
-
算法
+關注
關注
23文章
4631瀏覽量
93428 -
模型
+關注
關注
1文章
3342瀏覽量
49272 -
機器學習
+關注
關注
66文章
8446瀏覽量
133126
原文標題:收藏 | 機器學習模型調優3大策略
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論