當機器學習性能不是很好時,你會如何優化?

  1. 基於數據來改善性能

    獲得更多的數據:你能夠拿到更多或者更高質量的數據么?對現代非線性機器學習模型如深度學習而言,數據越多,改進越多。

    創造更多數據:如果你不能拿到更多數據,那麼,你能創造出新的數據么?也許你可以填充或者重新排列現有數據,或者利用概率模型來產生新的數據。

    清潔你的數據。你能否改善數據中的信號?也許可以糾正或刪除一些缺失或錯誤的觀測值,或者在合理範圍外的離群點,從而提升數據質量。

    數據重新取樣。你能否對數據重新取樣,以改變其大小或者分布?也許你可以用一個小得多的數據來實驗,以提高實驗的速度;或對某個特殊類型的觀察值進行過採樣/欠採樣以使得它們更好地代表整個數據集。

    重新界定問題:你能否改變你正試圖解決的問題類型?重構數據,如回歸,二項或多項分類,時間序列,異常檢測,評分,推薦等問題類型。

    重新縮放數據。你能否對數值型變數進行縮放處理?輸入數據的歸一化和標準化處理可以提升使用加權或距離度量的演算法性能。

    轉化數據。你能否改變數據的分布形態?使得數據更服從高斯分布,或進行指數變換可能會暴露出數據更多的特徵供演算法學習。

    數據投影(映射):你能否將數據投影到一個更低維的空間?你可以用無監督的聚類或投影方法,創造一個新的壓縮數據集代表。

    特徵選擇。所有的輸入變數是否同等重要?使用特徵選擇和衡量特徵重要性的方法,可以創造出數據的新視角,供模型演算法探索。

    特徵工程。 你能夠創造或者增加新的特徵?也許有的屬性可以分解為多個新的值(比如類別,日期或字元串)或者屬性可以聚集起來代表一個事件(如一個計數,二進位標誌或統計信息)
  2. 基於演算法

    重採樣方法。要用什麼樣的重採樣方法來估計其在新數據上的能力?使用一種能夠最好地利用現有數據的方法和參數設置。K折交叉驗證法,利用其中的一折作為驗證集可能是最佳操作。

    評價指標。用什麼樣的指標來評價預測能力?選擇能夠最好地體現問題和專業需求的指標。不要任何問題一上來就看分類準確率。

    基線性能。比較演算法時,什麼是基線性能?通過隨機演算法或零規則演算法(預測均值或眾數)來建立一個基線,並以此對所有演算法進行排序。

    抽檢線性演算法。什麼樣的線性演算法能有好結果?線性方法通常更容易產生偏倚,也易於理解,能快速訓練。如果能達到好效果,則更容易被選中。評估多個不同的線性方法。

    抽檢非線性演算法。哪些非線性演算法能有好結果?非線性演算法通常要求更多數據,有更高的複雜性,但是能獲得更好的性能。評估多個不同的非線性方法。

    從文獻中偷師學藝。哪些文獻報導的方法能很好地解決你的問題?也許你能從演算法類型或傳統方法的延伸中獲取解決自己問題的靈感。

    標準參數設置。評估演算法時,什麼是標準的參數設置?每一個演算法都有機會解決你的問題,這不是說在現有基礎上死磕調參,而是說,每一種演算法都需要把參數調好,才能在演算法「大賽」中有勝出的機會

  3. 演算法調參

    診斷。對演算法要做哪些診斷和回顧?也許可以回顧一下學習曲線,了解目前模型的狀態是過擬合還是欠擬合,然後糾正它。不同的演算法可能提供不同的可視化結果和診斷。檢視演算法得到正確預測結果和錯誤預測結果的樣本。

    試試直覺。你的直覺是什麼?如果你琢磨參數的時間足夠長,而反饋迴路又很短,那麼你會得到怎麼調參的直覺。試一試,看看你遇到更大的難題時能不能再得到新的參數設置靈感。

    學習文獻。文獻中用到了哪些參數,範圍是多少?評估標準參數性能是調參的良好開端。

    隨機搜索。哪些參數可以用隨機搜索?也許你可使用演算法超參數的隨機搜索,來發現那些你永遠也想不到的參數設置。

    網格搜索。哪些參數可以使用網格搜索?也許有一些標準超參數網格值,你可以拿來賦值,從而發現好的參數設置,重複這一過程,不斷精調網格。

    最優化。那些參數可以優化?也許有一些參數,如結構或者學習率,可以用直接搜索程序(如模式搜索)或隨機優化(如遺傳演算法)來調整。

    交替實施。演算法有哪些其他的實施?也許其中的一個交替實施方法可以在同樣的數據上得到更好的結果。每個演算法都有無數的微決定由演算法的使用者做出,其中的一些可能會影響到問題的解決。

    演算法延伸。哪些是常見的演算法延伸?也許你可以通過評估常見的或標準的演算法延伸而提高性能。這可能需要一些實施工作。

    演算法定製。對你的個案而言,需要做哪些演算法定製?也許你可以為你的數據修飾演算法,從損失函數,內部優化方法到演算法的具體決定。

    聯繫專家。對你的個案,專家們有什麼演算法推薦?給一個或多個演算法領域的學術界專家寫封簡單的郵件,概述你的預測問題,以及你已經做出的嘗試。這可能會讓你獲悉前沿工作,或者學術界不為你所知的新想法。
  4. 模型融合

    混合模型預測結果。 你是否可以直接組合多個模型的預測結果?也許你可以使用同樣的或不同的演算法來搭建多個模型。對各自的預測結果取均值,或者眾數。

    混合數據呈現方式。你是否可以組合用不同數據呈現方法得到的模型預測結果?也許你使用了不同的問題投射方法,來訓練性能良好的的演算法,那麼這些預測結果可以組合起來。

    混合數據樣本。你是否可以組合不同數據角度(特徵)訓練的模型?也許你可以創造訓練樣本的多個子樣本來訓練一個性能良好的演算法,然後把結果組合起來。這叫做自助聚集(bootstrap aggregation)或者bagging,當各個模型的預測都很高明而方法各異(不相關)時,效果最好。

    糾正預測。你是否可以糾正性能良好模型的預測?也許你可以明確地糾正預測結果,或者通過像boosting這樣的方法來學習如何糾正預測錯誤。

    學習組合。你能否使用新的模型,學習如何將多個性能良好的預測結果以最佳方式組合起來?這叫做堆棧(stacked generalization or stacking),當各子模型都很高明而方法各異時,通常能產生不錯的結果,聚集模型就是各預測結果的簡單加權線性模型。這個過程可以在多個層面上重複進行。

    來自機器學習系列(20)_機器學習性能改善備忘單 - CSDN博客

機器學習系列(20)_機器學習性能改善備忘單 - CSDN博客

推薦閱讀:

少數人的智慧
[論文學習]Deep Learning Based Recommendation: A Survey
關於評分預測和TopN推薦的討論?
如何學習推薦系統?
為什麼感覺「今日頭條」推薦的內容很不準,而且好像也沒見怎麼改善過?

TAG:机器学习 | 深度学习书籍 | 推荐系统 |