本文邀請qiaolin來回答,與你分享機器學習學習算法的方法論~
決策流程
選擇機器學習算法時,需要考慮以下因素:
需要預測什么?分類,回歸,還是聚類?
算法的復雜度,應用在大數據上是否可行?
算法有沒有迭代(相對于batch)的版本?能否實現在線學習或streaming?
算法是否需要可解釋性?
特征是否高維?如高維是否考慮用PCA或Lasso降維?
算法的準確率,是否傾向于欠擬合或過擬合?
參數模型中引入的“prior”對該數據集是否合理?
同時我們也需要考慮模型的表現,如模型訓練時,神經網絡的比SVM快(why?),而預測步驟,SVM比神經網絡快(why?)。
模型選擇流程圖
新手選擇合適的模型,可以參照下面Scikit-learn、SAS或MicrosoftAzure的算法流程圖。
[Scikit-learn算法流程圖選擇]
[SAS算法流程圖]
[MicrosoftAzure算法流程圖]
集成學習(Ensemblemethods)
基于樹模型的算法,需要理解從下面模型的變化:決策樹->baggingtrees->隨機森林->GradientBoostingtrees。
準確率增加
解釋性下降
計算時間和需要的內存上升(boosting算法無法并行計算)
我們比較下集成學習常見Bagging,Boosting和Blending方法:
Bagging:用Boostrap有放回抽樣的方法抽取樣本建不同的模型,每個模型投票時權重相等
Boosting:Gradientboostingtrees用殘差訓練下一個模型,改進預測效果。
Blending:分別訓練不同的基本模型,將各個基本模型的預測結果,作為最終模型的特征輸入。如以線性模型作終模型,相當于把各個基本模型去權重的到最后的預測結果;如用更復雜的模型作最終模型,則可用非線性方法結合不同基本模型的結果。
Kaggle比賽中排名頂尖的選手經常采用集成學習的方法,效果常比單獨的模型好,但需要更多的計算資源和復雜的超參數調節。
下圖展示了不同scikit-learn分類算法,對于不同訓練集的效果比較。
[scikit-learn分類算法效果比較]
非預測問題的模型選擇
學習了復雜的分類模型后,大家可能有疑問:為什么還要用老式傳統的邏輯回歸(Logisticregression)模型呢?實際項目中,我們有事不僅希望模型的預測效果好誤差小,也需要模型簡單可解釋,在有監督模型里,能夠理解特征對y的影響方向和大小。