機器學習性能改善備忘單:32個幫你做出更好預測模型的技巧和竅門

機器學習最有價值(實際應用最廣)的部分是預測性建模。也就是在曆史數據上進行訓練,在新數據上做出預測。
而預測性建模的首要問題是:
如何才能得到更好的結果?
這個備忘單基於本人多年的實踐,以及我對頂級機器學習專家和大賽優勝者的研究。
有了這份指南,你不但不會再掉進坑裏,而且會提升性能,甚至在你自己的一些預測難題中取得世界領先水平的結果。
讓我們一起來看看吧!
注意:本文的結構基於早些時候另一篇關於改善深度學習性能的指南——《如何改善深度學習性能》

◆ ◆ ◆
概述
本備忘單的目的是為你提供一些提升機器學習性能的想法。要獲得突破,你所需要的可能就是其中的一個。找到你要的那個,然後回來,再找下一個再提升。
我把這份清單分為4個子主題:
-
基於數據改善性能
-
借助算法改善性能
-
用算法調參改善性能
-
借助模型融合改善性能
清單越往下,你獲得的增益可能越小。比如,對問題場景重新設立框架或者更多的數據通常比對最好的算法進行調參得到收益要多。
不總是這樣,但通常如此。
◆ ◆ ◆
1.基於數據改善性能
改變你的訓練集數據以及問題定義方式,你能夠得到很大提升,也許是最大的提升。
策略:從新的、不同的角度透視你的數據,以便將潛藏的問題結構充分暴露給算法。
數據策略
-
獲得更多的數據:你能夠拿到更多或者更高質量的數據麼?對現代非線性機器學習模型如深度學習而言,數據越多,改進越多。
-
創造更多數據:如果你不能拿到更多數據,那麼,你能創造出新的數據麼?也許你可以填充或者重新排列現有數據,或者利用概率模型來產生新的數據。
-
清潔你的數據。你能否改善數據中的信號?也許可以糾正或刪除一些缺失或錯誤的觀測值,或者在合理範圍外的離群點,從而提升數據質量。
-
數據重新取樣。你能否對數據重新取樣,以改變其大小或者分布?也許你可以用一個小得多的數據來實驗,以提高實驗的速度;或對某個特殊類型的觀察值進行過采樣/欠采樣以使得它們更好地代表整個數據集。
-
重新界定問題:你能否改變你正試圖解決的問題類型?重構數據,如回歸,二項或多項分類,時間序列,異常檢測,評分,推薦等問題類型。
-
重新縮放數據。你能否對數值型變量進行縮放處理?輸入數據的歸一化和標準化處理可以提升使用加權或距離度量的算法性能。
-
轉化數據。你能否改變數據的分布形態?使得數據更服從高斯分布,或進行指數變換可能會暴露出數據更多的特征供算法學習。
-
數據投影(映射):你能否將數據投影到一個更低維的空間?你可以用無監督的聚類或投影方法,創造一個新的壓縮數據集代表。
-
特征選擇。所有的輸入變量是否同等重要?使用特征選擇和衡量特征重要性的方法,可以創造出數據的新視角,供模型算法探索。
-
特征工程。 你能夠創造或者增加新的特征?也許有的屬性可以分解為多個新的值(比如類別,日期或字符串)或者屬性可以聚集起來代表一個事件(如一個計數,二進製標誌或統計信息)
上麵這些工作的期待結果是:你應該得到數據集的一批新視角和新版本。
下一步:你可以用預測性模型算法評估它們每一個的價值。
◆ ◆ ◆
2.借助算法改善性能
機器學習無外乎算法。
調整的策略:找出那些性能高於基線水平,比平均水平要好的算法和數據呈現方式。對結果保持懷疑態度,設計實驗,使得它很難愚弄你。
算法策略
-
重采樣方法。要用什麼樣的重采樣方法來估計其在新數據上的能力?使用一種能夠最好地利用現有數據的方法和參數設置。K折交叉驗證法,利用其中的一折作為驗證集可能是最佳操作。
-
評價指標。用什麼樣的指標來評價預測能力?選擇能夠最好地體現問題和專業需求的指標。不要任何問題一上來就看分類準確率。
-
基線性能。比較算法時,什麼是基線性能?通過隨機算法或零規則算法(預測均值或眾數)來建立一個基線,並以此對所有算法進行排序。
-
抽檢線性算法。什麼樣的線性算法能有好結果?線性方法通常更容易產生偏倚,也易於理解,能快速訓練。如果能達到好效果,則更容易被選中。評估多個不同的線性方法。
-
抽檢非線性算法。哪些非線性算法能有好結果?非線性算法通常要求更多數據,有更高的複雜性,但是能獲得更好的性能。評估多個不同的非線性方法。
-
從文獻中偷師學藝。哪些文獻報導的方法能很好地解決你的問題?也許你能從算法類型或傳統方法的延伸中獲取解決自己問題的靈感。
-
標準參數設置。評估算法時,什麼是標準的參數設置?每一個算法都有機會解決你的問題,這不是說在現有基礎上死磕調參,而是說,每一種算法都需要把參數調好,才能在算法“大賽”中有勝出的機會。
上麵這些工作的期待結果是:你應該會得到性能良好的候選算法和數據呈現候選方法清單(不太長的有限個方法)。
下一步:通過算法調參改善性能
◆ ◆ ◆
3.用算法調參改善性能
算法調參可能是你花時間最多的地方。它可能非常耗時間,從算法抽檢中很快能挖掘出一兩個性能不錯的算法,而把這一兩個算法的潛力充分挖掘出來可能需要好幾天,幾周甚至幾個月的時間。
調整的策略:充分挖掘性能良好的算法的潛力。
調參策略
-
診斷。對算法要做哪些診斷和回顧?也許可以回顧一下學習曲線,了解目前模型的狀態是過擬合還是欠擬合,然後糾正它。不同的算法可能提供不同的可視化結果和診斷。檢視算法得到正確預測結果和錯誤預測結果的樣本。
-
試試直覺。你的直覺是什麼?如果你琢磨參數的時間足夠長,而反饋回路又很短,那麼你會得到怎麼調參的直覺。試一試,看看你遇到更大的難題時能不能再得到新的參數設置靈感。
-
學習文獻。文獻中用到了哪些參數,範圍是多少?評估標準參數性能是調參的良好開端。
-
隨機搜索。哪些參數可以用隨機搜索?也許你可使用算法超參數的隨機搜索,來發現那些你永遠也想不到的參數設置。
-
網格搜索。哪些參數可以使用網格搜索?也許有一些標準超參數網格值,你可以拿來賦值,從而發現好的參數設置,重複這一過程,不斷精調網格。
-
最優化。那些參數可以優化?也許有一些參數,如結構或者學習率,可以用直接搜索程序(如模式搜索)或隨機優化(如遺傳算法)來調整。
-
交替實施。算法有哪些其他的實施?也許其中的一個交替實施方法可以在同樣的數據上得到更好的結果。每個算法都有無數的微決定由算法的使用者做出,其中的一些可能會影響到問題的解決。
-
算法延伸。哪些是常見的算法延伸?也許你可以通過評估常見的或標準的算法延伸而提高性能。這可能需要一些實施工作。
-
算法定製。對你的個案而言,需要做哪些算法定製?也許你可以為你的數據修飾算法,從損失函數,內部優化方法到算法的具體決定。
-
聯係專家。對你的個案,專家們有什麼算法推薦?給一個或多個算法領域的學術界專家寫封簡單的郵件,概述你的預測問題,以及你已經做出的嚐試。這可能會讓你獲悉前沿工作,或者學術界不為你所知的新想法。
上麵這些工作的期待結果是:你應該可以得到一個很短的清單,上麵是經過精調的算法。也許甚至隻剩下一個。
下一步:到這一步,對剩下的一個或多個模型進行最後的收尾,做出預測或者投放到產品中。更進一步的性能提升可以通過多個模型的融合來達到。
◆ ◆ ◆
4. 借助模型融合改善性能
你可以組合多個模型的預測。在算法調參之後,這是下一個大的改善空間。實際上,組合多個“夠用”的模型,而不是多個精調(同時也非常脆弱,可能嚴重overfitting)的模型通常可以達到很好的性能提升。
策略:組合多個性能良好的模型預測結果。
組裝策略
-
混合模型預測結果。 你是否可以直接組合多個模型的預測結果?也許你可以使用同樣的或不同的算法來搭建多個模型。對各自的預測結果取均值,或者眾數。
-
混合數據呈現方式。你是否可以組合用不同數據呈現方法得到的模型預測結果?也許你使用了不同的問題投射方法,來訓練性能良好的的算法,那麼這些預測結果可以組合起來。
-
混合數據樣本。你是否可以組合不同數據角度(特征)訓練的模型?也許你可以創造訓練樣本的多個子樣本來訓練一個性能良好的算法,然後把結果組合起來。這叫做自助聚集(bootstrap aggregation)或者bagging,當各個模型的預測都很高明而方法各異(不相關)時,效果最好。
-
糾正預測。你是否可以糾正性能良好模型的預測?也許你可以明確地糾正預測結果,或者通過像boosting這樣的方法來學習如何糾正預測錯誤。
-
學習組合。你能否使用新的模型,學習如何將多個性能良好的預測結果以最佳方式組合起來?這叫做堆棧(stacked generalization or stacking),當各子模型都很高明而方法各異時,通常能產生不錯的結果,聚集模型就是各預測結果的簡單加權線性模型。這個過程可以在多個層麵上重複進行。
上麵這些工作的期待結果是:你應該可以得到一個或多個性能良好的模型的組裝結果,比任何單一模型的結果都好。
下一步:可以把一個或多個組裝最後定下來,進行預測,投入產品中。
◆ ◆ ◆
結語
本備忘單密集打包了各種改善性能的想法。如果你覺得這裏提到的要點太多,你不必樣樣都做。提升性能,你隻需要一個好的想法。你可以依照下序的建議試試:
-
選擇一個組
-
數據
-
算法
-
調參
-
組裝
-
-
從組中選擇一個方法
-
從選擇的方法中挑一個去試
-
比較結果,如果有改進則留下
-
重複上述過程
-
原文發布時間為:2016-12-05
本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號
最後更新:2017-05-27 11:02:31
上一篇:
10張圖片告訴你為什麼說數學史也是一部藝術史
下一篇:
吳甘沙最新演講:AI為互聯網行業補坑 自動駕駛前景看好
《第一本Docker書(修訂版)》——1.2 Docker組件
近300位數據挖掘專家雲集阿裏,最精彩的發言都在這兒
《軟件工藝師:專業、務實、自豪》一2.6.1 轉型不徹底
System.Runtime.InteropServices.COMException (0x8004E00F): COM+ 無法與 Microsoft 分布式事務協調程序交談 (異常來自 HRESU
中國首個光量子計算機誕生 中科院、阿裏巴巴共同研發
使用99元一年的256MB高性能阿裏雲Redis加速Discuz論壇
【mysql】mysqldump用法
政府大數據服務,跑馬圈地正當時
HTTP請求和響應格式
7.3 RelativeLayout布局詳解