↑↑↑關(guān)注后"星標(biāo)"Datawhale
作者:Xiaoyou Wang,編譯:機(jī)器之心無論是 Kaggle 競賽還是工業(yè)部署,機(jī)器學(xué)習(xí)模型在搭建起來之后都面臨著無盡的調(diào)優(yōu)需求。在這個(gè)過程中我們要遵循怎樣的思路呢?
如果準(zhǔn)確性不夠,機(jī)器學(xué)習(xí)模型在真實(shí)世界就沒有什么實(shí)用性了。對(duì)于開發(fā)者們來說,如何提高性能是非常重要的工作,本文將介紹一些常用策略,包括選擇最佳算法、調(diào)整模型設(shè)置和特征工程。如果你學(xué)習(xí)過正確的教程,很快就能訓(xùn)練起自己的第一個(gè)機(jī)器學(xué)習(xí)模型。然而想要在第一個(gè)模型上跑出很好的效果是極難的。在模型訓(xùn)練完后,我們需要花費(fèi)大量時(shí)間進(jìn)行調(diào)整以提高性能。不同類型的模型有不同的調(diào)優(yōu)策略,在本文中,我們將介紹模型調(diào)優(yōu)的常用策略。在模型調(diào)優(yōu)之前,我們首先需要知道現(xiàn)在的模型性能是好是壞。如果你不知道如何衡量模型的性能,可以參考:每個(gè)模型都有基線指標(biāo)。我們可以使用「模式類別」作為分類模型的基線指標(biāo)。如果你的模型優(yōu)于基準(zhǔn)線,那么恭喜你,這是一個(gè)好的開始。如果模型能力還沒有達(dá)到基準(zhǔn)水平,這說明你的模型還沒有從數(shù)據(jù)中獲得有價(jià)值的見解(insight)。為了提高性能,還有很多事情要做。當(dāng)然還有一個(gè)情況就是模型的表現(xiàn)「太過優(yōu)秀」了,比如 99% 的準(zhǔn)確率和 99% 的召回率。這并不是什么好事,可能表示你的模型存在一定的問題。一個(gè)可能的原因是「數(shù)據(jù)泄露」,我們將在「消除數(shù)據(jù)泄漏功能」部分討論如何解決此問題。一般來說,模型調(diào)優(yōu)有 3 個(gè)方向:選擇更好的算法,調(diào)優(yōu)模型參數(shù),改進(jìn)數(shù)據(jù)。比較多個(gè)算法是提高模型性能的一個(gè)簡單的想法,不同的算法適合不同類型的數(shù)據(jù)集,我們可以一起訓(xùn)練它們,找到表現(xiàn)最好的那個(gè)。例如對(duì)于分類模型,我們可以嘗試邏輯回歸、支持向量機(jī)、XGBoost、神經(jīng)網(wǎng)絡(luò)等。
圖源:https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html超參數(shù)調(diào)優(yōu)是一種常用的模型調(diào)優(yōu)方法。在機(jī)器學(xué)習(xí)模型中,學(xué)習(xí)過程開始之前需要選擇的一些參數(shù)被稱為超參數(shù)。比如決策樹允許的最大深度,以及隨機(jī)森林中包含的樹的數(shù)量。超參數(shù)明顯影響學(xué)習(xí)過程的結(jié)果。調(diào)整超參數(shù)可以讓我們?cè)趯W(xué)習(xí)過程中很快獲得最佳結(jié)果。
我們非常建議使用公開可用的庫幫助進(jìn)行超參數(shù)調(diào)整,例如 optuna。對(duì)于分類模型,我們通常用 2 個(gè)指標(biāo)來衡量模型的性能:精度和召回率。根據(jù)問題的不同,你可能需要優(yōu)化召回率或精度中的一個(gè)。有一種快速的方法來調(diào)整模型以在兩個(gè)指標(biāo)之間進(jìn)行權(quán)衡。分類模型預(yù)測標(biāo)簽類別的概率,因此我們可以簡單地修改概率閾值來修改召回率和精度。例如,如果我們建立一個(gè)模型來預(yù)測乘客在泰坦尼克號(hào)沉船事故中是否生還,該模型可以預(yù)測乘客生還或死亡的概率。果概率高于 50%,模型將預(yù)測乘客會(huì)幸存,反之乘客死亡。如果我們想要更高的精度,我們可以增加概率閾值。然后,該模型將預(yù)測較少的乘客幸存,但會(huì)更精確。
除了選擇最佳算法和調(diào)優(yōu)參數(shù)外,我們還可以從現(xiàn)有數(shù)據(jù)中生成更多特征,這被稱為特征工程。構(gòu)建新的特征需要一定的領(lǐng)域知識(shí)和創(chuàng)造力。這是一個(gè)構(gòu)建新特征的例子:創(chuàng)建一個(gè)功能來計(jì)算文本中的字母數(shù)。
創(chuàng)建一個(gè)功能來計(jì)算文本中的單詞數(shù)。
創(chuàng)建一個(gè)理解文本含義的特征(例如詞嵌入)。
過去 7 天、30 天或 90 天的聚合用戶事件計(jì)數(shù)。
從日期或時(shí)間戳特征中提取「日」、「月」、「年」和「假期后的天數(shù)」等特征。
使用公共數(shù)據(jù)集來增加訓(xùn)練數(shù)據(jù)當(dāng)你窮盡從現(xiàn)有數(shù)據(jù)集中生成新特征的想法時(shí),另一個(gè)想法是從公共數(shù)據(jù)集中獲取特征。假如你正在構(gòu)建一個(gè)用來預(yù)測用戶是否會(huì)轉(zhuǎn)換為會(huì)員的模型,可用的數(shù)據(jù)集中卻沒有太多的用戶信息,只有「電子郵件」和「公司」屬性。那么你就可以從第三方獲取用戶和公司以外的數(shù)據(jù),如用戶地址、用戶年齡、公司規(guī)模等等,這些數(shù)據(jù)可以用于豐富你的訓(xùn)練數(shù)據(jù)。
添加更多特征并不總是好的。去除不相關(guān)和嘈雜的特征有助于減少模型訓(xùn)練時(shí)間并提高模型性能。scikit-learn 中有多種特征選擇方法可以用來去除不相關(guān)的特征。刪除數(shù)據(jù)泄露(data leakage)特征正如上文提到的,一種場景是模型的性能「非常好」。但是在部署模型并在生產(chǎn)中使用這些模型時(shí),性能會(huì)變得很差。造成這個(gè)問題的原因可能是「數(shù)據(jù)泄露」,這是模型訓(xùn)練的一個(gè)常見陷阱。數(shù)據(jù)泄露是指使用一些發(fā)生在目標(biāo)變量之后的特征,并包含目標(biāo)變量的信息。然而現(xiàn)實(shí)生活中的預(yù)測不會(huì)有那些數(shù)據(jù)泄露特征。例如想要預(yù)測用戶是否會(huì)打開電子郵件,特征可能就包括用戶是否點(diǎn)擊了電子郵件。模型一旦看到用戶點(diǎn)擊了它,那么就預(yù)測用戶 100% 會(huì)打開它。然而在現(xiàn)實(shí)生活中,我們無法知道是否有人在打開電子郵件之前沒有點(diǎn)擊它。我們可以使用 SHAP 值 debug 數(shù)據(jù)泄露問題,用 SHAP 庫繪制圖表可以顯示出影響最大的特征以及它們?nèi)绾味ㄏ蛴绊懩P偷妮敵?。如果特征與目標(biāo)變量高度相關(guān)并且權(quán)重非常高,那么它們可能是數(shù)據(jù)泄露特征,我們可以將它們從訓(xùn)練數(shù)據(jù)中刪除。
獲取更多訓(xùn)練數(shù)據(jù)是提高模型性能一種明顯而有效的方法。更多的訓(xùn)練數(shù)據(jù)能夠讓模型找到更多見解,并獲得更高的準(zhǔn)確率。
那么,什么時(shí)候該停止調(diào)優(yōu)了?你需要知道如何開始,也需要知道在何時(shí)停止,很多時(shí)候怎樣才算足夠是一個(gè)難以回答的問題。模型的提升仿佛是無限的,沒有終點(diǎn):總會(huì)有新想法帶來新數(shù)據(jù)、創(chuàng)建新功能或算法的新調(diào)整。首先,最低限度的標(biāo)準(zhǔn)是模型性能至少應(yīng)優(yōu)于基線指標(biāo)。一旦滿足了最低標(biāo)準(zhǔn),我們應(yīng)該采用以下流程來改進(jìn)模型并判斷何時(shí)停止:嘗試所有改進(jìn)模型的策略。
將模型性能與你必須驗(yàn)證的其他一些指標(biāo)進(jìn)行比較,以驗(yàn)證模型是否有意義。
在進(jìn)行了幾輪模型調(diào)整后,評(píng)估一下繼續(xù)修改和性能提升百分點(diǎn)之間的性價(jià)比。
如果模型表現(xiàn)良好,并且在嘗試了一些想法后幾乎沒有繼續(xù)改進(jìn),請(qǐng)將模型部署到生產(chǎn)過程中并測量實(shí)際性能。
如果真實(shí)條件下的性能和測試環(huán)境中類似,那你的模型就算可以用了。如果生產(chǎn)性能比訓(xùn)練中的性能差,則說明訓(xùn)練中存在一些問題,這可能是因?yàn)檫^擬合或者數(shù)據(jù)泄露。這意味著還需要重新調(diào)整模型。
模型調(diào)優(yōu)是一個(gè)漫長而復(fù)雜的過程,包含模型的重新訓(xùn)練、新想法的試驗(yàn)、效果評(píng)估和指標(biāo)對(duì)比。通過本文介紹的思路,希望你可以將自己的機(jī)器學(xué)習(xí)技術(shù)提升到更高的水平。https://m.mage.ai/how-to-improve-the-performance-of-a-machine-learning-ml-model-409b05b2a5f
干貨學(xué)習(xí),點(diǎn)贊三連↓