1. 程式人生 > >模型優化-提高準確率

模型優化-提高準確率

如何提高訓練模型準確率

提升一個模型的表現有時很困難,嘗試所有曾學習過的策略和演算法,但模型正確率並沒有改善。 這才是考驗真本領的時候!這也是普通的資料科學家跟大師級資料科學家的差距所在。 本文將分享 8 個經過證實的方法,使用這些方法可以建立穩健的機器學習模型。

導語

模型的開發週期有多個不同的階段,從資料收集開始直到模型建立。 不過,在通過探索資料來理解(變數的)關係之前,建議進行假設生成(hypothesis generation)步驟(如果想了解更多有關假設生成的內容, 推薦閱讀(why-and-when-is-hypothesis-generation-important)。我認為,這是預測建模過程中最被低估的一個步驟。 花時間思考要回答的問題以及獲取領域知識也很重要。這有什麼幫助呢? 它會幫助你隨後建立更好的特徵集,不被當前的資料集誤導。這是改善模型正確率的一個重要環節。 在這個階段,你應該對問題進行結構化思考,即進行一個把此問題相關的所有可能的方面納入考慮範圍的思考過程。 現在讓我們挖掘得更深入一些。讓我們看看這些已被證實的,用於改善模型準確率的方法。

正文

1.增加更多資料

持有更多的資料永遠是個好主意。相比於去依賴假設和弱相關,更多的資料允許資料進行“自我表達”。資料越多,模型越好,正確率越高。 我明白,有時無法獲得更多資料。比如,在資料科學競賽中,訓練集的資料量是無法增加的。 但對於企業專案,我建議,如果可能的話,去索取更多資料。這會減少由於資料集規模有限帶來的痛苦。

2.處理缺失值和異常值

訓練集中缺失值與異常值的意外出現,往往會導致模型正確率低或有偏差。這會導致錯誤的預測。 這是由於我們沒能正確分析目標行為以及與其他變數的關係。所以處理好缺失值和異常值很重要。 仔細看下面一幅截圖。在存在缺失值的情況下,男性和女性玩板球的概率相同。 但如果看第二張表(缺失值根據稱呼“Miss”被填補以後),相對於男性,女性玩板球的概率更高。 從上面的例子中,我們可以看出缺失值對於模型準確率的不利影響。所幸,我們有各種方法可以應對缺失值和異常值:

  • 1.缺失值:對於連續變數,可以把缺失值替換成平均值、中位數、眾數。對於分類變數,可以把變數作為一個特殊類別看待。 你也可以建立模型預測缺失值。KNN為處理缺失值提供了很好的方法。想了解更多這方面內容,推薦閱讀《Methods to deal and treat missing values》。
  • 2.異常值:你可以刪除這些條目,進行轉換,分箱。如同缺失值,你也可以對異常值進行區別對待。 想了解更多這方面內容,推薦閱讀《How to detect Outliers in your dataset and treat them?》。

3.特徵工程學(Feature Engineering)

這一步驟有助於從現有資料中提取更多資訊。新資訊作為新特徵被提取出來。 這些特徵可能會更好地解釋訓練集中的差異變化。因此能改善模型的準確率。 假設生成對特徵工程影響很大。好的假設能帶來更好的特徵集。 這也是我一直建議在假設生成上花時間的原因。特徵工程能被分為兩個步驟:

  • 特徵轉換:許多場景需要進行特徵轉換:

  • A)把變數的範圍從原始範圍變為從0到1。這通常被稱作資料標準化。 比如,某個資料集中第一個變數以米計算,第二個變數是釐米,第三個是千米,在這種情況下,在使用任何演算法之前,必須把資料標準化為相同範圍。

  • B)有些演算法對於正態分佈的資料表現更好。所以我們需要去掉變數的偏向。 對數,平方根,倒數等方法可用來修正偏斜。

  • C)有些時候,數值型的資料在分箱後表現更好,因為這同時也處理了異常值。 數值型資料可以通過把數值分組為箱變得離散。這也被稱為資料離散化。

  • 建立新特徵:從現有的變數中衍生出新變數被稱為特徵建立。這有助於釋放出資料集中潛藏的關係。 比如,我們想通過某家商店的交易日期預測其交易量。在這個問題上日期可能和交易量關係不大, 但如果研究這天是星期幾,可能會有更高的相關。在這個例子中,某個日期是星期幾的資訊是潛在的。我們可以把這個資訊提取為新特徵,優化模型。

4.特徵選擇

特徵選擇是尋找眾多屬性的哪個子集合,能夠最好的解釋目標變數與各個自變數的關係的過程。 你可以根據多種標準選取有用的特徵,例如:

  • 所在領域知識:根據在此領域的經驗,可以選出對目標變數有更大影響的變數。
  • 視覺化:正如這名字所示,視覺化讓變數間的關係可以被看見,使特徵選擇的過程更輕鬆。
  • 統計引數:我們可以考慮p值,資訊價值(information values)和其他統計引數來選擇正確的引數。
  • PCA:這種方法有助於在低維空間表現訓練集資料。這是一種降維技術。降低資料集維度還有許多方法:如因子分析、低方差、高相關、前向後向變數選擇及其他。

5.使用多種演算法

使用正確的機器學習演算法是獲得更高準確率的理想方法。但是說起來容易做起來難。 這種直覺來自於經驗和不斷嘗試。有些演算法比其他演算法更適合特定型別資料。因此,我們應該使用所有有關的模型,並檢測其表現。

6.演算法的調整

我們都知道機器學習演算法是由引數驅動的。這些引數對學習的結果有明顯影響。引數調整的目的是為每個引數尋找最優值,以改善模型正確率。 要調整這些引數,你必須對它們的意義和各自的影響有所瞭解。你可以在一些表現良好的模型上重複這個過程。 例如,在隨機森林中,我們有 max_features,number_trees, random_state, oob_score 以及其他引數。優化這些引數值會帶來更好更準確的模型。 想要詳細瞭解調整引數帶來的影響,可以查閱《Tuning the parameters of your Random Forest model》。下面是隨機森林演算法在scikit learn中的全部引數清單: RandomForestClassifier(n_estimators=10,criterion=‘gini’,max_depth=None,min_samples_split=2, min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=‘auto’,max_leaf_nodes=None, bootstrap=True,oob_score=False,n_jobs=1,random_state=None,verbose=0,warm_start=False,class_weight=None)

7.整合模型

在資料科學競賽獲勝方案中最常見的方法。這個技術就是把多個弱模型的結果組合在一起,獲得更好的結果。它能通過許多方式實現,如:

  • Bagging(Bootstrap Aggregating)
  • Boosting 想了解更多這方面內容,可以查閱《Introduction to ensemble learning》。 使用整合方法改進模型正確率永遠是個好主意。主要有兩個原因:1)整合方法通常比傳統方法更復雜;2)傳統方法提供好的基礎,在此基礎上可以建立整合方法。 注意:到目前為止,我們瞭解了改善模型準確率的方法。但是,高準確率的模型不一定(在未知資料上)有更好的表現。有時,模型準確率的改善是由於過度擬合。

8.交叉驗證

如果想解決這個問題,我們必須使用交叉驗證技術(cross validation)。交叉驗證是資料建模領域最重要的概念之一。 它是指,保留一部分資料樣本不用來訓練模型,而是在完成模型前用來驗證。 這種方法有助於得出更有概括性的關係。想了解更多有關交叉檢驗的內容, 建議查閱《Improve model performance using cross validation》。

結語

預測建模的過程令人疲憊。但是,如果你能靈活思考,就可以輕易勝過其他人。 簡單地說,多考慮上面這8個步驟。獲得資料集以後,遵循這些被驗證過的方法,你就一定會得到穩健的機器學習模型。 不過,只有當你熟練掌握了這些步驟,它們才會真正有幫助。 比如,想要建立一個整合模型,你必須對多種機器學習演算法有所瞭解。