/關注公眾號 長歌大腿,發(fā)送“機器學習”關鍵字春哨,可獲取包含機器學習(包含深度學習),統(tǒng)計概率椰拒,優(yōu)化算法等系列文本與視頻經(jīng)典資料,如《ESL》《PRML》《MLAPP》等燃观。/
文章來源《現(xiàn)代推薦算法》矩陣分解系列簡介 .
該章主要介紹矩陣分解系列算法,該系列算法是推薦系統(tǒng)中最重要的算法之一憨颠,矩陣分解原理清晰积锅,且復雜度不那么高。
對于矩陣分解系列算法在推薦算法中而言缚陷,其容易編程實現(xiàn),實現(xiàn)復雜度低嚷节,預測效果也好虎锚,同時還能保持擴展性。這些都是它寶貴的優(yōu)點效斑。當然柱徙,矩陣分解方法有時候解釋性還是沒有基于概率的邏輯回歸之類的推薦算法好,不過這也不影響它的流行程度护侮。對于較為小型的推薦系統(tǒng)來說用矩陣分解應該是一個不錯的選擇。大型的話滨溉,則矩陣分解比起現(xiàn)在的流行的深度學習推薦算法的一些方法不占優(yōu)勢凳忙。
矩陣分解推薦算法簡介
2009年舉辦了一個Netflix Prize比賽禽炬,發(fā)出的是一個評分預測的問題。就是每個用戶給電影打了1-5分腹尖,然后讓你去預測一個用戶對一個電影會打多少分伐脖。這種只有“用戶”+“評分”的兩元素構型的打分矩陣乐设,也稱為“user-item矩陣”。在整個“user-item矩陣”中蠕啄,因為實際情況及個人愛好等原因戈锻,其實大部分是“空狀態(tài)”,“空狀態(tài)”表示了“沒有任何了解”格遭,而沒有“非空狀態(tài)”的肯定是表示了人對電影打過分,而且分數(shù)范圍1-5分的分數(shù)骚秦。所以璧微,比賽其實規(guī)則很簡單,整個比賽的目的就是去用“非空狀態(tài)”與預測那些“空狀態(tài)”蒙揣,具體會被打多少分开瞭。
這個時候,這種“user-item矩陣”就是一種“向量/矩陣”形式的結(jié)構化數(shù)據(jù)了嗤详,以數(shù)據(jù)表形式存儲和表達。那么一個嚴重的問題就出現(xiàn)了递宅,針對于這種“結(jié)構化數(shù)據(jù)”苍狰,但是結(jié)構又非常簡單,只有兩個維度的特征淋昭,如何能夠做推薦系統(tǒng)就成了關鍵,而且這種推薦要求原理簡單而且使用效果好英融,包括數(shù)學理論知識扎實和計算復雜度的可接受性。
在Netflix Prize之前胡野,類似問題很多方案都是把缺失的值都填上3分痕鳍,類似于結(jié)構化數(shù)據(jù)特征預處理的缺失數(shù)據(jù)處理一樣:離散數(shù)據(jù)用眾數(shù)填充,連續(xù)數(shù)據(jù)用中位數(shù)填充笼呆,然后把user-item矩陣做SVD分解,選取最大的K個特征值對應的特征向量組成的矩陣耘眨,然后再乘起來境肾。這個時候,那些確實的數(shù)據(jù)對都變成了其他的分數(shù)奥喻,這個分數(shù)就是預估值。但是這樣可行的原因是數(shù)據(jù)集量不是那么大纯趋,但是當數(shù)據(jù)集到了幾十萬維的矩陣冷离,這個時候SVD是不可行的,因為SVD分解是個O(n^3)的復雜度的算法痹栖。
SVD適用于稠密矩陣瞭空,計算復雜度高,只能適用于小型的低階推薦系統(tǒng)咆畏。
FunkSVD 優(yōu)化策略中使用了L2正則化,可以適用于稀疏矩陣溺健,計算復雜度低钦讳,有防止過擬合得考慮。在FunkSVD上愿卒,加入了各項的偏置考慮琼开,引出了BiasSVD。再引入用戶反饋考慮柜候,修改模型得到了SVD++算法。再加入時間權重衰減問題的考慮鹦肿,得到了TimesSVD++的算法辅柴。