推荐系统resys小组线下活动见闻2009-08-22
http://www.tuicool.com/articles/vUvQVn
?不周山?原文??http://www.wentrue.net/blog/?p=559不久前,始于2006年的?netflix prize?名花有主,幾年來一直領先的Bellkor隊得到了最后的冠軍及100萬美元的獎金。但就在Bellkor隊提交的結果實現跨越性的成績之后到30天后比賽正式結束,中間還發生了很多風起云涌的趣事。其中就有The Ensemble組加入爭奪,該組內有幾名中國人。
就在netflix prize結束不久,國內搞個性化推薦的研究者或從業者聚集在一起,在google group上開通了一個名為?resys?的交流組。初期組里的交流非常激烈,不久后就開展了第一次的線下活動,也就是上周,在奇遇花園,由The Ensemble組的成員xlvector主講參加netflix prize的經歷與算法體系。我是一個有一定學術背景,但已經一年來基本脫離這個圈子的人,本著對本行業理論知識的渴求去聽,得到的收獲可謂頗豐。之前沒時間整理總結一下,這回可不能再偷懶了。
先用照片簡單介紹一下聚會情況,然后再總結一下算法方面的東西。
奇遇花園當天下午過來參加聚會的人數近30人
xlvector同學在講參加netflix prize的經歷和算法
wangyt同學在講RBM
會后與clickstone及NP的合影
散會后的討論依舊很熱烈
會上xlvector所用的PPT可以從?這里?看到,這里講的算法嚴格地說是從netflix數據集里根據RMSE的目標衍生出來的一個算法體系,實際的商用推薦系統或者說廣泛意義上的學術界上的推薦系統,則是另外的一套體系。比如,商用推薦系統,類別比較多,不同的類別的推薦系統可能都不一樣,即使同是電影推薦系統,商用推薦系統除了打分因素,還會考慮其它的因素(如語義),作為評判標準的需求方面不單是RMSE,還有多樣性,點擊率等等。而廣泛意義的學術界上的推薦系統,關于推薦質量的評估體系本就不統一,RMSE屬于是精確度這一維度中的一種量化指標,其它還有如多樣性、可解釋性等等難以量化的指標。而工程上的實現還需要考慮計算效率、稀疏性、存儲量、分布并行等許多問題。
但由netflix衍生出來的那套算法體系還是有意義的,它畢竟在一個統一的框架里,描繪了在一種確定的量化指標的情況下,怎樣才可以把推薦系統里的一些共性的問題解決得最好。
按照報告所講的內容,這套體系里的算法主要可以分為以下幾類,這個我按照出現時間順序敘述為:KNN和鄰域模型;矩陣分解與降維;Boltzmann機和RBM;時間相關的模型。
- KNN和鄰域模型:是很基本很符合人的認識的一種推薦方式,分為user-based和item-based兩種。他們的核心都是根據user-item-rating打分記錄,計算相似度矩陣,然后進行推薦。user-based是根據打分記錄計算出用戶之間的相似度矩陣,然后把跟你相似的用戶喜歡的而你沒收藏過的條目推薦給你。item-based是根據打分記錄計算出條目之間的相似度矩陣,然后根據你喜歡的條目,把跟這些條目相關的而你又沒收藏過的條目推薦給你。實際使用因為用戶相似度矩陣通常要比條目相似度矩陣要大得多,所以item-based的方法使用比較廣泛。
- 矩陣分解與降維:通常是SVD,理論上SVD分解可以把一個user-item-rating的矩陣M分解成M=U*D*V的形式,U是用戶特征矩陣,V是條目特征矩陣,D是包含特征值從大到小排序的對角矩陣。只取D中的前K個有效元素,后面的置0,U*D就得到一個降維后的用戶特征矩陣,V*D就得到一個降維后的條目特征矩陣,對這兩個特征矩陣進行比較,就知道哪些用戶跟哪些條目更相近了。SVD有解析上的分解方法,但如果矩陣規模很大,這一步會非常慢,所以netflix prize上使用的都是迭代的方法,每次輸入一個user-item-rating記錄,用EM算法進行迭代求優,直至求得最優值。這種方法及其升級版本的SVD++算法據xlvector說是單個模型的性能的極限。
- Boltzmann機和RBM:Boltzmann機很早以前我就知道是把模擬退火算法應用于神經網絡訓練而生成的一種神經網絡模型,也是一種迭代取優的方法,但一直對其原理沒有深究。當天wangyt上來給我們講約束Boltzmann機RBM,我是聽得云里霧里,基本沒聽明白。只聽懂了它的性能:它的性能不如SVD++,但在作模型融合時有特別的優勢,也許是因為它適用于一些其它算法不適用于的人群。
- 時間相關模型:就是把時間的因素考慮到模型里面去了,多加了一些變參,模型也變復雜了,沒什么太特別的東西。
- 分類器融合:以上說的都是一個個的分類器,精度到0.90基本到頭了,后面的進步就要靠把上面說的各種分類器融合到一個集成分類器里。這個我了解,因為跟我一年畢業的那個博士師兄做的就是分類器融合。在netflix prize里面,到最后都是在拼分類器的融合,誰能找到更多更好的分類器,誰能做出更好的融合算法,誰的預測精度就高。但是我看來,里面用的分類器融合算法比較我那個師兄做的那一大堆森林理論,還是要相對簡單一些,當然不是越復雜就越好了。最后做成的集成分類器通常有好幾百個,光計算量也夠嗆的,單個分類器里面不同質的也就上面那幾大類,其它的都是參數上的變化。
最后三十天的故事:按照大賽規則,Bellkor提交了過線的結果之后,再過30天,比賽就會結束,所以最后30天里的故事也比較多。如多個組開始組成一個更大的組The ensemble,以便集成更多的分類器,得到更高精度;大組之間的交流與爭論;做完正規工作之后還要相應地研究一些“作弊策略”。都是些挺有意思的事情。
最后The ensemble做到了英雄榜上的第一(第一組測試集精度最高)。根據規則,要在兩組數據上進行考察,并作加權平均,而這個值Bellkor略勝了一點點,The emsemble只能飲恨。
最后補充幾點:
- xlvector同學認為,沒有一個模型是最好的,多個模型的整合才能得到最佳的結果,所以人手也顯得很重要。我的認為是,在實際推薦系統中,要得到好的效果,多個不同質(CF?語義?其它因素?)的算法整合也很重要,也就是hybrid recommendation。
- 算法可能有數據依賴性,在netflix數據集上表示良好的算法與參數,在你的數據集上未必就是最好的。
- 在netflix prize論壇上找到了兩個單分類器的c/c++源代碼,可以拿來體驗一下。SVD?、?nprize?、?Kadri框架?。
總結
以上是生活随笔為你收集整理的推荐系统resys小组线下活动见闻2009-08-22的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL SERVER 导入EXCEL的存
- 下一篇: MVC3 ActionResult 返回