常見的多模型融合算法
多模型融合算法可以比單一模型算法有極為明顯的效果提升。但是怎樣進行有效的融合,充分發揮各個算法的長處?這里總結一些常見的融合方法:
1. 線性加權融合法
線性加權是最簡單易用的融合算法,工程實現非常方便,只需要匯總單一模型的結果,然后按不同算法賦予不同的權重,將多個推薦算法的結果進行加權,即可得到結果:
是給用戶(user)推薦商品(item)的得分, 是算法K的權重,是算法k得到的用戶(user)對商品item的推薦得分。這種融合方式實現簡單,但效果較差。因為線性加權的參數是固定的,實踐中參數的選取通常依賴對全局結果升降的總結,一旦設定后,無法靈活的按照不同的推薦場景來自動變換。比如如果某個場景用算法A效果較好,另外一種場景用算法B效果較好,線性融合的方式在這種情況下不能取得好的效果。為了解決這個問題,達觀數據進行了改進,通過引入動態參數的機制,通過訓練用戶對推薦結果的評價、與系統的預測是否相符生成加權模型,動態的調整權重使得效果大幅提升。
2. 交叉融合法
交叉融合常被稱為Blending方法,其思路是在推薦結果中,穿插不同推薦模型的結果,以確保結果的多樣性。
這種方式將不同算法的結果組合在一起推薦給用戶。
交叉融合法的思路是“各花入各眼”,不同算法的結果着眼點不同,能滿足不同用戶的需求,直接穿插在一起進行展示。這種融合方式適用於同時能夠展示較多條結果的推薦場景,並且往往用於算法間區別較大,如分別基於用戶長期興趣和短期興趣計算獲得的結果。
3. 瀑布融合法
瀑布型(Waterfall Model)融合方法采用了將多個模型串聯的方法。每個推薦算法被視為一個過濾器,通過將不同粒度的過濾器前后銜接的方法來進行:
在瀑布型混合技術中,前一個推薦方法過濾的結果,將作為后一個推薦方法的候選集合輸入,層層遞進,候選結果在此過程中會被逐步遴選,最終得到一個量少質高的結果集合。這樣設計通常用於存在大量候選集合的推薦場景上。
設計瀑布型混合系統中,通常會將運算速度快、區分度低的算法排在前列,逐步過渡為重量級的算法,讓寶貴的運算資源集中在少量較高候選結果的運算上。在面對候選推薦對象(Item)數量龐大,而可曝光的推薦結果較少,要求精度較高、且運算時間有限的場景下,往往非常適用。
4. 特征融合法
不同的原始數據質量,對推薦計算的結果有很大的影響。以用戶興趣模型為例,我們既可以從用戶的實際購買行為中,挖掘出用戶的“顯式”興趣,又可以用用戶的點擊行為中,挖掘用戶“隱式”興趣;另外從用戶分類、人口統計學分析中,也可以推測用戶偏好;如果有用戶的社交網絡,那么也可以了解周圍用戶對該用戶興趣的影響。
所以通過使用不同的數據來源,抽取不同的特征,輸入到推薦模型中進行訓練,然后將結果合並。這種思路能解決現實中經常遇到的數據缺失的問題,因為並非所有用戶都有齊全的各類數據,例如有些用戶就缺少交易信息,有些則沒有社交關系數據等。通過特征融合的方法能確保模型不挑食,擴大適用面。
5.預測融合法
推薦算法也可以被視為一種“預測算法”,即我們為每個用戶來預測他接下來最有可能喜歡的商品。而預測融合法的思想是,我們可以對每個預測算法再進行一次預測,即不同的算法的預測結果,我們可以訓練第二層的預測算法去再次進行預測,並生成最終的預測結果。
如下圖所示,我們把各個推薦算法的預測結果作為特征,將用戶對商品的反饋數據作為訓練樣本,形成了第二層預測模型的訓練集合,具體流程如下
圖中的二層預測模型可以使用常用的分類算法,如SVM、隨機森林、較大熵等,但達觀實踐中,融合效果較好的是GBDT(Gradient Boosting Decision Tree)方法。
6.分類器Boosting思想
推薦問題有時也可以轉化為模式分類(Pattern Classification)問題去看待,我們將候選集合是否值得推薦划分為幾個不同的集合,然后通過設計分類器的方法去解決。
這樣一來我們就可以用到分類算法中的Boosting思想,即將若干個弱分類器,組合成一個強分類器的方法。Boosting的核心思想是每輪訓練后對預測錯誤的樣本賦以較大的權重,加入后續訓練集合,也就是讓學習算法在后續的訓練集中對較難的判例進行強化學習,從而得到一個帶權重的預測函數序列h,預測效果好的預測函數權重較大,反之較小。
最終的預測函數H對分類問題采用有權重的投票方式,對回歸問題采用加權平均的方法對新示例進行判別。算法的流程如下:(參考自treeBoost論文)
通過模型進行融合往往效果較好,但實現代價和計算開銷也比較大。