提升Kaggle模型的實用小技巧!
如果你最近剛入手Kaggle,或者你是這個平臺的老???,你可能會想知道如何輕松提升模型的性能。以下是我在Kaggle歷程中積累的一些實用技巧(https://www.kaggle.com/louise2001)。所以,無論是建立自己的模型,還是從一個基準的公共內(nèi)核開始,都可以嘗試實施這些建議!

一、經(jīng)常回顧過去的比賽(溫故知新)
雖然Kaggle的策略是絕對不會出現(xiàn)兩次一模一樣的比賽,但經(jīng)常會出現(xiàn)非常相似的問題的翻版。例如,有些主辦方每年都會提出同一個主題的常規(guī)挑戰(zhàn)(比如NFL的Big Data Bowl),只是有一些小的變化,或者在某些領域(比如醫(yī)學影像)有很多目標不同但本質非常相似的比賽。
因此,回顧獲獎者的解決方案(總是在競爭結束后公開,這要感謝不可思議的Kaggle社區(qū))可以是一個很好的加分項,因為它給你提供了開始的想法,以及一個成功的策略。如果你有時間回顧很多,你也會很快發(fā)現(xiàn),即使在非常不同的比賽中,一些流行的基準模型似乎總是做得足夠好:
卷積神經(jīng)網(wǎng)絡或計算機視覺挑戰(zhàn)中更復雜的ResNet或EfficientNet。 WaveNet在音頻處理中的挑戰(zhàn)(如果你只是使用Mel Spectrogram,也可以很好地用圖像識別模型來處理)。 BERT及其衍生產(chǎn)品(RoBERTa等)在自然語言處理中的挑戰(zhàn)。 Light Gradient Boosting(或其他梯度提升或樹策略)對表格數(shù)據(jù)的處理。
你可以直接在Kaggle平臺上尋找類似的比賽,或者查看Sundalai Rajkumar的這篇精彩總結(https://www.kaggle.com/sudalairajkumar/winning-solutions-of-kaggle-competitions)。
回顧過去的比賽也可以幫助你獲得其他步驟的提示。例如,獲得類似問題的預處理的提示和技巧,人們?nèi)绾芜x擇他們的超參數(shù),在他們的模型中實現(xiàn)了什么額外的工具來贏得比賽,或者如果他們只專注于囊括他們最好的模型的相似版本,或者是將所有可用公共內(nèi)核整合在一起。
二、花足夠的時間在數(shù)據(jù)預處理上
這絕不是工作中最令人興奮的部分。但是,這一步驟的重要性不言而喻:
清理數(shù)據(jù):千萬不要以為主機努力為你提供最干凈的數(shù)據(jù)。大多數(shù)時候,它是錯誤的。填充NaNs,去除離群值,將數(shù)據(jù)分成同質觀測值的類別等。
做一些簡單的探索性數(shù)據(jù)分析,以大致了解你正在使用的工具(這將有助于您獲得見解和想法)。
增強數(shù)據(jù):這可能是提高性能的最好方法之一。但是要注意不要讓數(shù)據(jù)太大,以至于你的模型無法再處理它。你可以在互聯(lián)網(wǎng)上找到一些額外的數(shù)據(jù)集,或者在Kaggle平臺上(在過去類似的比賽中?。?,或者只是在提供給你的數(shù)據(jù)上工作:翻轉和裁剪圖像,疊加音頻記錄,反向翻譯或替換文本中的同義詞等。
預處理也是你必須思考你將依靠什么交叉驗證方法的步驟:Trust Your CV。在你的數(shù)據(jù)上工作將幫助你知道如何分割數(shù)據(jù):根據(jù)目標值分層還是根據(jù)樣本類別分層 ? 你的數(shù)據(jù)是否不平衡 ? 如果你有一個聰明的CV策略,并且僅依靠它而不是靠排行榜得分(盡管這可能很誘人),那么你很有可能在私人的最終分數(shù)上獲得驚喜。
三、嘗試超參數(shù)搜索
超參數(shù)搜索可以幫助你找到你的模型應該具備的最佳參數(shù)(學習率、softmax的溫度等),以獲得最佳的性能,而無需手工運行上千次的枯燥實驗。
最常見的超參數(shù)搜索策略包括:
網(wǎng)格搜索(請永遠不要這樣做):對我來說是性能最差的方法,因為對于某些值,你可能會完全錯過某個模式或性能的局部峰值,它包括或測試超參數(shù)值平均分布在你定義的可能值的區(qū)間上。
隨機搜索(及其Monte-Carlo衍生物):嘗試參數(shù)的隨機值。它的主要問題在于它是一種并行的方法,而且你測試的參數(shù)越多,成本就越高。然而,它的優(yōu)點是可以讓你在測試中加入先驗知識:如果你想找到1e-4和1e-1之間的最佳學習率,但你認為它必須在1e-3左右,你可以從以1e-3為中心的對數(shù)正態(tài)分布中抽取樣本。
貝葉斯搜索:基本上是隨機搜索,但經(jīng)過改進,因為它是迭代的,因此成本低得多。它根據(jù)當前模型迭代評估一個有希望的超參數(shù)配置,然后更新它。它是這三種方法中性能最好的一種。
其他方法包括基于梯度的搜索或演化優(yōu)化,危險性較大,一般不適用。在一些特殊情況下,可以推薦使用這些方法。
四、簡單的包裝器可以改變游戲規(guī)則
我發(fā)現(xiàn)有一些模型包裝器可以用來獲得更好的結果。它們在不同級別上工作:
在優(yōu)化過程中,千萬不要忘了添加一個學習率調(diào)度器,幫助獲得更精確的訓練(從小開始,當你的模型學習良好時逐步增加)。
還是在優(yōu)化過程中,你可以把Lookahead包在你的優(yōu)化器上;Lookahead算法包括向前走k個優(yōu)化步驟,找到性能最好的地方,然后向最佳方向后退一步,從那里重新開始訓練。理論上,你可以獲得更好的性能,雖然我從來沒有發(fā)現(xiàn)這是真的;但它可以穩(wěn)定訓練,當你的數(shù)據(jù)非常嘈雜時,這是好事。
在開始訓練之前,為你的權重找到一個好的初始化:如果你使用的是流行的架構,就從基準權重開始(比如圖像識別中的ImageNet),如果不是,可以嘗試Layer Sequential Unit Variance初始化(LSUV,理論上是最好的初始化)。它包括將你的權重初始化為正交的,并且在所有可訓練層中都是單位方差。
最后,我經(jīng)常發(fā)現(xiàn),從神經(jīng)網(wǎng)絡的最后一層權重來訓練LGBM,而不是添加一個softmax作為輸出層,效果會出奇的好。
五、Bagging集成在一起!
除了數(shù)據(jù)增強,可能沒有什么技術比bagging更有效地提高你的性能。
我個人的小技巧是:總是保存我運行過的每一個模型預測,并對所有模型進行平均(只是基本的平均,我從來沒有發(fā)現(xiàn)任何證據(jù)表明,"聰明 "的集成,如按模型的單一性能加權,在最終得分中增加了什么)。
不要忘記把公共內(nèi)核也進行裝袋。你的集成策略中的模型越多,你就越有可能在私人排行榜中穩(wěn)操勝券。
原文鏈接:https://towardsdatascience.com/5-simple-tips-to-improve-your-kaggle-models-159c00523418
