在項目、工作中,如果你是作爲一個算法工程師或者數據分析師,用到機器學習或深度學習模型的話,會經常遇到模型的結果始終提升不了的瓶頸。在這個時候,我們該怎麼做呢?
我對模型的優化進行了一份總結,以後大家遇到類似的模型效果提升不了的時候,就按照這個清單看一遍有哪些自己還沒做的,有哪些覺得可以用到的,進行一番嘗試。
我主要從以下四個方面進行了一下總結:
1、數據
人們都說,數據決定了模型的上限,而不同的模型只是決定你能如何逼近這個上限。有時候,我們可以改變訓練數據或者改變樣本集的標籤,這時往往會有出乎意料的效果。有句話說的好,選擇比努力更重要!
策略總的核心思想就是創建不同的目標樣本,並且儘可能的使用最底層的特徵來進行模型訓練。
具體策略:
- 獲得更多的數據: 一個好的深度學習模型需要更多的數據來訓練,其他非線性的機器學習模型也是如此。
- 開發更多變量: 如果你實在不能獲得更多的數據亦或是更好質量的數據,也許可以通過概率模型、統計模型來生成新的變量。
- 清洗數據: 通過數據清洗,你可以對缺失值、異常值進行合理的填補與修復,從而提升數據整體的質量。
- 重新採樣數據: 其實可以通過對數據的重新採樣來改變數據的分佈和大小。對某一特定類型的樣本進行採樣,說不定可以更好滴表現出效果。又或者是使用更小的數據,從而加快速度。
- 問題解決思路的重新思考: 有的時候,你可以把你目前正在“焦頭爛耳”想要解決的“預測性”問題,換成迴歸、分類、時間序列、異常檢測、排序、推薦等等的問題。
- 調整變量再入模: 這裏指的是對數據進行離散化、標準化等的操作。
- 改變現有的變量: 這裏相信大家也很常見,就是對變量進行對數轉換或指數轉換,讓其特性能更好地表現。
- 對變量進行降維: 有的時候降維後的變量有更好的表現哦。
- 特徵選擇: 這個就是特徵工程了,簡單來說,就是你對特徵(變量)進行重要性的排序,選擇相對預測力強的特徵進入模型。
2、算法選擇
我們要做的就是識別出優於平均值的算法,但是在查詢資料的時候,對實驗過程和結果都要抱有懷疑的態度,並反覆進行思考。
具體策略:
- 重採樣方法: 使用什麼方法來估計效果?有個原則就是要充分利用可用的數據來驗證,這裏,k-fold交叉驗證方法可以是最好的哦。
- 評價指標: 不同的目標需要使用不同的評價指標,這個相信大家在學習混淆矩陣的時候應該有所瞭解,什麼pv+,命中率等等,都是對於特定類型的目標有着非常有效的識別。如果是一個排序性的問題,而你卻用了準確度的指標來衡量模型的好壞似乎也說不過去吧?
- 關注線性算法: 線性算法通常會不那麼好用,但是卻更好地被人類理解且可以快速測試,如果你發現某個線性算法表現地還行,請繼續優化它。
- 關注非線性算法: 非線性算法往往會需要更多的數據,通過更加複雜的計算來獲得一個不錯的效果。
- 從文獻中找ideas: 這個方法還經常做,從文獻中可以瞭解到更多的經典算法在特定需要下的應用,通過對文獻的閱讀來擴充你的“解題”思路。
3、算法調優
模型調參是一個耗時耗力的體力活,有時候運氣好,馬上就能得到不錯的結果。但是如果要對所有的模型算法都進行有優化,可能就需要幾天、幾個星期或者幾個月了。充分使用性能良好的機器學習算法,並且使用良好的調參框架,在參數方面如果有經驗的話,那是最好的。
具體策略:
- 診斷方法: 不同的算法需要提供不同的可視化和診斷的方法。
- 調參的直覺: 這個就很“玄學”了,但其實都是一些經驗,當你調的參足夠多,也可以大致可以對這些不同算法的參數有了自己的理解,自然就有了這些所謂的“直覺”。
- 隨機搜索: 在N維參數空間按某種分佈(如正態分佈)隨機取值,因爲參數空間的各個維度的重要性是不等的,隨機搜索方法可以在不重要的維度上取巧。
- 網格搜索: 先固定一個超參,然後對其他各個超參依次進行窮舉搜索。
- 從文獻中找ideas: 從文獻中瞭解這個算法用到了哪些算法,並且這些算法主要的取值值域,有益於自身工作的開展哦。
- 從知名網站中找ideas: 國內我個人覺得知乎還是蠻可以的,關於這節的參數調參,也是有好多好文章,其外還有csdn也不錯。
4、效果集成
這種方法在一些競賽中是非常有用的,可以結合多個模型的結果,綜合輸出一個更加穩定而且效果不錯的模型。
具體策略:
- 混合模型的預測值: 你可以把多個模型的預測結果結合起來,你可以將多個訓練效果還不錯的模型的預測結合綜合起來,輸出一個“平均”結果。
- 混合不同數據的預測值: 你也可以把不同的數據集訓練出來模型的結果進行結合,作爲一個輸出。(這個與上面的區別在於數據集的特徵不同)
- 混合數據樣本: 很拗口,其實意思就是將數據集拆分成不同的子數據集,用於訓練同一個算法,最後輸出綜合的預測結果。這個也被稱之爲bootstrap aggregation 或 bagging。
- 使用模型的方法集成: 你也可以使用一個新的模型來學習如何結合多個性能不錯的模型結果,輸出一個最優的結合。這被稱之爲堆疊泛化或疊加,通常在子模型有技巧時很有效,但在不同的方式下,聚合器模型是預測的一個簡單的線性加權。這個過程可以重複多層深度。
以上就是我總結的一些優化模型效果的方法,大家可以收藏一下,方便以後隨時查看~