天天看點

8個經過證明的方法:提高機器學習模型的準确率8個經過證明的方法:提高機器學習模型的準确率

8個經過證明的方法:提高機器學習模型的準确率8個經過證明的方法:提高機器學習模型的準确率

來自 http://datartisan.com/article/detail/74.html

提升一個模型的表現有時很困難。如果你們曾經糾結于相似的問題,那我相信你們中很多人會同意我的看法。你會嘗試所有曾學習過的政策和算法,但模型正确率并沒有改善。你會覺得無助和困頓,這是90%的資料科學家開始放棄的時候。

不過,這才是考驗真本領的時候!這也是普通的資料科學家跟大師級資料科學家的差距所在。你是否曾經夢想過成為大師級的資料科學家呢?

如果是的話,你需要這 8 個經過證明的方法來重構你的模型。建立預測模型的方法不止一種。這裡沒有金科玉律。但是,如果你遵循我的方法(見下文),(在提供的資料足以用來做預測的前提下)你的模型會擁有較高的準确率。

我從實踐中學習了到這些方法。相對于理論,我一向更熱衷于實踐。這種學習方式也一直在激勵我。本文将分享 8 個經過證明的方法,使用這些方法可以建立穩健的機器學習模型。希望我的知識可以幫助大家獲得更高的職業成就。.

模型的開發周期有多個不同的階段,從資料收集開始直到模型建立。

不過,在通過探索資料來了解(變量的)關系之前,建議進行假設生成(hypothesis generation)步驟(如果想了解更多有關假設生成的内容,推薦閱讀 why-and-when-is-hypothesis-generation-important )。我認為,這是預測模組化過程中最被低估的一個步驟。

花時間思考要回答的問題以及擷取領域知識也很重要。這有什麼幫助呢?它會幫助你随後建立更好的特征集,不被目前的資料集誤導。這是改善模型正确率的一個重要環節。

在這個階段,你應該對問題進行結構化思考,即進行一個把此問題相關的所有可能的方面納入考慮範圍的思考過程。

現在讓我們挖掘得更深入一些。讓我們看看這些已被證明的,用于改善模型準确率的方法。

持有更多的資料永遠是個好主意。相比于去依賴假設和弱相關,更多的資料允許資料進行“自我表達”。資料越多,模型越好,正确率越高。

我明白,有時無法獲得更多資料。比如,在資料科學競賽中,訓練集的資料量是無法增加的。但對于企業項目,我建議,如果可能的話,去索取更多資料。這會減少由于資料集規模有限帶來的痛苦。

訓練集中缺失值與異常值的意外出現,往往會導緻模型正确率低或有偏差。這會導緻錯誤的預測。這是由于我們沒能正确分析目标行為以及與其他變量的關系。是以處理好缺失值和異常值很重要。

仔細看下面一幅截圖。在存在缺失值的情況下,男性和女性玩闆球的機率相同。但如果看第二張表(缺失值根據稱呼“Miss”被填補以後),相對于男性,女性玩闆球的機率更高。

8個經過證明的方法:提高機器學習模型的準确率8個經過證明的方法:提高機器學習模型的準确率

左側:缺失值處理前;右側:缺失值處理後

從上面的例子中,我們可以看出缺失值對于模型準确率的不利影響。所幸,我們有各種方法可以應對缺失值和異常值:

缺失值:對于連續變量,可以把缺失值替換成平均值、中位數、衆數。對于分類變量,可以把變量作為一個特殊類别看待。你也可以建立模型預測缺失值。KNN 為處理缺失值提供了很好的方法。想了解更多這方面内容,推薦閱讀《Methods to deal and treat missing values》。

異常值:你可以删除這些條目,進行轉換,分箱。如同缺失值,你也可以對異常值進行差別對待。想了解更多這方面内容,推薦閱讀《How to detect Outliers in your dataset and treat them?》。

這一步驟有助于從現有資料中提取更多資訊。新資訊作為新特征被提取出來。這些特征可能會更好地解釋訓練集中的差異變化。是以能改善模型的準确率。

假設生成對特征工程影響很大。好的假設能帶來更好的特征集。這也是我一直建議在假設生成上花時間的原因。特征工程能被分為兩個步驟:

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

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

B) 有些算法對于正态分布的資料表現更好。是以我們需要去掉變量的偏向。對數,平方根,倒數等方法可用來修正偏斜。

8個經過證明的方法:提高機器學習模型的準确率8個經過證明的方法:提高機器學習模型的準确率

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

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

特征選擇是尋找衆多屬性的哪個子集合,能夠最好的解釋目标變量與各個自變量的關系的過程。

你可以根據多種标準選取有用的特征,例如:

所在領域知識:根據在此領域的經驗,可以選出對目标變量有更大影響的變量。

可視化:正如這名字所示,可視化讓變量間的關系可以被看見,使特征選擇的過程更輕松。

統計參數:我們可以考慮 p 值,資訊價值(information values)和其他統計參數來選擇正确的參數。

PCA:這種方法有助于在低維空間表現訓練集資料。這是一種降維技術。 降低資料集次元還有許多方法:如因子分析、低方差、高相關、前向後向變量選擇及其他。

使用正确的機器學習算法是獲得更高準确率的理想方法。但是說起來容易做起來難。

這種直覺來自于經驗和不斷嘗試。有些算法比其他算法更适合特定類型資料。是以,我們應該使用所有有關的模型,并檢測其表現。

8個經過證明的方法:提高機器學習模型的準确率8個經過證明的方法:提高機器學習模型的準确率

來源:Scikit-Learn 算法選擇圖

我們都知道機器學習算法是由參數驅動的。這些參數對學習的結果有明顯影響。參數調整的目的是為每個參數尋找最優值,以改善模型正确率。要調整這些參數,你必須對它們的意義和各自的影響有所了解。你可以在一些表現良好的模型上重複這個過程。

例如,在随機森林中,我們有 max_features, number_trees, random_state, oob_score 以及其他參數。優化這些參數值會帶來更好更準确的模型。

想要詳細了解調整參數帶來的影響,可以查閱《Tuning the parameters of your Random Forest model》。下面是随機森林算法在scikit learn中的全部參數清單:

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

Bagging (Bootstrap Aggregating)

Boosting

想了解更多這方面内容,可以查閱《Introduction to ensemble learning》。

使用內建方法改進模型正确率永遠是個好主意。主要有兩個原因:

1)內建方法通常比傳統方法更複雜;

2)傳統方法提供好的基礎,在此基礎上可以建立內建方法。

到目前為止,我們了解了改善模型準确率的方法。但是,高準确率的模型不一定(在未知資料上)有更好的表現。有時,模型準确率的改善是由于過度拟合。

如果想解決這個問題,我們必須使用交叉驗證技術(cross validation)。交叉驗證是資料模組化領域最重要的概念之一。它是指,保留一部分資料樣本不用來訓練模型,而是在完成模型前用來驗證。

8個經過證明的方法:提高機器學習模型的準确率8個經過證明的方法:提高機器學習模型的準确率

這種方法有助于得出更有概括性的關系。想了解更多有關交叉檢驗的内容,建議查閱《Improve model performance using cross validation》。

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

本文分享了 8 個經過證明的方法。這些方法用來改善模型的預測表現。它們廣為人知,但不一定要按照文中的順序逐個使用。

原作者:Sunil Ray

翻譯:王鵬宇

原文連結:

<a href="http://www.analyticsvidhya.com/blog/2015/12/improve-machine-learning-results/">8 Proven Ways for improving the “Accuracy” of a Machine Learning Model</a>

 本文轉自羅兵部落格園部落格,原文連結:http://www.cnblogs.com/hhh5460/p/5186232.html,如需轉載請自行聯系原作者

繼續閱讀