提高機器學習模型準確率的八大方法

https://blog.csdn.net/u011239443/article/details/53378368

想要提高模型的性能有時會是一件難度不小的事情。如果你也遇到過類似的情況,相信一定會認同我這一看法。在一一嘗試畢生所學的對策和算法之後,依然沒能夠提高模型的準確率,這時,一種陷入困境的無助感就會涌上心頭。事實上,百分之九十的數據科學家就是在這一階段選擇了放棄。

但是,好戲這纔開始!正是這一點劃清了平凡的數據科學家與非凡的數據科學家的界限。你是不是也夢想着成爲一名卓越的數據科學家呢?

如果是的話,你就需要有這八種可靠的方式來重構你的模型方法了。建立可預測模型的途徑有多種多樣,沒有定法,但是,如果你按照我的方式(分享如下)進行,你的模型準確率一定可以得到提高(條件是你的數據足以對其做出預測)。

通過以前的經驗,我掌握了這些方法。相比鑽研理論,我是一直都更喜歡在實踐中學習的,而這些方法也不斷地給我以鼓勵。本文中我分享了八種可靠的方法,你們可以藉此建立起一個強有效的機器學習模型。希望我的分享能夠幫助你們攀登事業的更高峯。

模型開發週期要經歷不同的階段,始於數據收集,終於模型建立。

然而,在探索數據變量關係之前,我強烈建議你最好先進行假設生成,這是預測建模中最被忽視的一個步驟。

行業信息一直是很重要的,那麼,它們是如何發揮作用的呢?

如果後期想要構建更好的特徵,思考和獲取信息是很有幫助的,它會使特徵不因爲數據組中現有的數據而產生偏差。通常,正是這關鍵的一步使模型的準確率大大提高了。

這一階段,你要針對具體的問題採取結構化思考的方式,也就是在思考過程中考慮到某個特定問題裏所有可能的方面。

好的,那麼現在讓我們再深入一點,探尋一下提高模型準確性的有效辦法。

 

1.獲取更多數據

擁有更多的數據在任何時候都不壞,更多的數據就能讓其“爲自己代言”,而不是僅僅依賴於作的假設和弱小的相互關係。獲取更多數據會使模型更完善更準確。

但是我很清楚,有時候對於增加數據我們也無能爲力。例如:在數據科學競賽中,我們除了增加訓練數據的規模以外別無選擇。因此在進行公司項目時,只要有可能,還是建議大家儘可能獲得更多的數據,這會減少因數據組有限而帶來的麻煩。

2.處理缺失值和異常值

訓練數據中意外的缺失值和異常值通常會降低模型的準確率,或使模型產生的結果出現偏差,最終導致預測不準。這是因爲我們沒能夠準確地分析這一行爲以及它與其他變量的關係。因此,認真對待缺失值和異常值非常重要。

請仔細看下面的圖表。它表明,如果出現缺失數據,女性打板球的機率就和男性的基本持平。但是,看一下第二行(姓名稱謂是“小姐”後的處理缺失數據),我們就可以看到女性與男性相比打板球的成功率更高。

由上,我們可以看到,缺失數據對模型準確率會產生反作用。幸運的是,我們有很多方法處理缺失值和異常值:

  • 缺失值:如果出現了持續變量,你可以用平均值、中位數和衆數來填補丟失值。對於分類變量,你可以把變量看成單獨一類,也可以建立一個模型來預測丟失值。KNN插補方法就提供了一種處理丟失值的手段。想更多地瞭解以上方法,請參考文章《處理丟失值的幾種方法》。

  • 異常值:你可以用刪除觀察值,轉換、分箱和填補數值的方法,或者(和缺失值一樣)你也可以單獨處理缺失值。可以參考文章《如何檢測並處理數據組中的異常值》來了解更多類似方法。

3.特徵工程

這一步驟有利於從現有數據中提煉出更多信息,新的信息會根據新特徵得以提煉出來,這些信息更能夠解釋訓練數據的變化。因此,一定會使模型準確率更高。

特徵工程受到假設生成的重要影響,合理的假設可以產生顯著的特徵。所以,我通常建議將黃金時間投入於假設生成的過程。特徵工程流程可分爲以下兩步:

  • 特徵轉換:很多情形都需要進行特徵轉換。

a) 將一個變量的範圍從原始範圍變爲從零到一,這叫做數據規範化。例如:如果一個數據組第一個變量以米計算,第二個變量以釐米計算,第三個變量以千米計算,這時,我們在應用任何算法之前,必須以同樣的單位來規範這些變量。

b) 一些算法很適合處理正態分佈的數據,因此,我們必須消除變量的偏差值。消除偏差值的方法有取對數, 做平方根,或者取倒數。

 

c)有時,對數字數據進行分箱也是很奏效的方法,這種方法也能處理異常值。數值數據通過分組爲箱會變得更加離散。這叫做數據的離散化。

  • 創建特徵:從現有的變量中推出新的變量就是創建特徵,它有助於揭示數據組的隱藏關係。比如說:我們想通過某商店的交易日期預測其交易量。雖然交易日期可能與交易量沒有直接的關係,但是我們觀察一週內某天的數據,可能會發現兩者的相關性很高。在這種情況下,一週當中某天的信息就是隱藏的信息,我們關注這些就是希望模型能夠運行得更好。

4.特徵選擇

特徵選擇是一個找到屬性的最佳子集的過程,它更好地解釋了目標變量與變量間的關係。

你可以基於很多類似的標準來選擇有用的特徵,例如:

  • 行業知識:基於行業經驗,選擇那些對目標變量有更大影響的特徵。

  • 可視化:就像它的名字,可視化有助於使變量之間的關係更加直觀,使變量選擇過程更加便捷。

  • 統計參數:我們也考慮P值、信息值和其他統計參數來選擇正確的特徵。

  • PCA:這種方法有助於在更低維的空間表現訓練數據,同時也表現出數據的內在關係。這是一種降維技術。很多方法都能降低訓練數據的維度(特徵),例如要素分析、降低方差、提高相關性、後向/前向特徵選擇和其他等。

5.多種算法

使用正確的機器學習算法是實現更高準確率的理想方法。然而,說起來容易做起來卻難。

直覺是基於經驗和不懈的實踐得到的,一些算法相比其他的算法會更適合某種數據組。因此,我們應該儘可能應用所有的相關模型去檢查其運行情況。

6.算法調試

我們知道機器學習算法主要靠參數,參數影響機器學習過程的結果。

調試參量的目標就是發現每個參數的最佳值來提高模型的準確性。要想調試這些參數,你就一定要深入理解參數的意義和它們對模型的影響,你可以通過一系列運行良好的模型來重複這一過程。

例如:在隨機森林算法中,我們有很多參數例如max_features, number_trees, random_state, oob_score等等。直覺性的優化這些參數值會使模型更好、更準確。

你可以參考文章《調試隨機森林模型的參量》來進一步學習參量調試的影響。以下列出隨機森林scikit learn算法中的所有參數:

7.集成方法

這是在數據科學競賽中最常用的方法,通過結合多種弱模型的結果以產生更佳結果。可以通過很多方式實現,如:

Bagging (Bootstrap Aggregating)

Boosting

想要了解這種方法的更多信息,可以參考文章《集成學習簡介》。

將集成方法應用於提高模型的準確度一直都是很好的想法。原因有二:

  • 集成方法比傳統的方法更加複雜;

  • 傳統方法提供給你一個好的基礎,從中你可以提取信息來建立你自己的集成模型。 

注意:

到此,我們已經瞭解到一些可以提高模型準確性的一些方法。然而,模型準確率更高運行結果卻不一定更好(由於有看不見的數據點)。有時,模型準確率的提升也會是由過度擬合產生的。

 

8.交叉驗證

爲了找到問題的最佳答案,我們必須使用交叉驗證的方法。交叉驗證是數據建模中最重要的一個概念。它指的是保留一個不用於訓練的模型樣本,檢測該樣本的模型然後再最終確定模型。

這種方法有助於我們形成更有概括性的關係。想更多瞭解交叉驗證方法,請參考文章《通過交叉驗證提高模型運行》。

9.尾註

 

預測建模的過程很繁瑣。然而, 如果你能靈活思考,你就可以輕易超越你的對手。簡單來說,多思考這八個步驟。一旦得到數據組就遵循這些方法,你就一定會形成一個可靠的機器學習模型。然而,只有在你能單獨掌握這些步驟之後這八個步驟才能對你有所裨益。例如:瞭解多種機器學習算法才能建成一個集成模型。

本文中,我分享了八種可提高預測模型準確率的方法。這些方法廣爲人知,但未必要按如上描述進行逐一使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章