㈠ 求高手提供matlab協同過濾推薦演算法的源代碼,將不勝感激!!!
自己寫吧,我畢論也是做推薦演算法的。現在正在寫基於用戶的協同過濾。已基本完工。
Github: https://github.com/qdsclove/FinalYearProjectThesis_recommendation_system
㈡ 矩陣分解在協同過濾推薦演算法中的應用
矩陣分解在協同過濾推薦演算法中的應用
推薦系統是當下越來越熱的一個研究問題,無論在學術界還是在工業界都有很多優秀的人才參與其中。近幾年舉辦的推薦系統比賽更是一次又一次地把推薦系統的研究推向了高潮,比如幾年前的Neflix百萬大獎賽,KDD CUP 2011的音樂推薦比賽,去年的網路電影推薦競賽,還有最近的阿里巴巴大數據競賽。這些比賽對推薦系統的發展都起到了很大的推動作用,使我們有機會接觸到真實的工業界數據。我們利用這些數據可以更好地學習掌握推薦系統,這些數據網上很多,大家可以到網上下載。
推薦系統在工業領域中取得了巨大的成功,尤其是在電子商務中。很多電子商務網站利用推薦系統來提高銷售收入,推薦系統為Amazon網站每年帶來30%的銷售收入。推薦系統在不同網站上應用的方式不同,這個不是本文的重點,如果感興趣可以閱讀《推薦系統實踐》(人民郵電出版社,項亮)第一章內容。下面進入主題。
為了方便介紹,假設推薦系統中有用戶集合有6個用戶,即U={u1,u2,u3,u4,u5,u6},項目(物品)集合有7個項目,即V={v1,v2,v3,v4,v5,v6,v7},用戶對項目的評分結合為R,用戶對項目的評分范圍是[0, 5]。R具體表示如下:
推薦系統的目標就是預測出符號「?」對應位置的分值。推薦系統基於這樣一個假設:用戶對項目的打分越高,表明用戶越喜歡。因此,預測出用戶對未評分項目的評分後,根據分值大小排序,把分值高的項目推薦給用戶。怎麼預測這些評分呢,方法大體上可以分為基於內容的推薦、協同過濾推薦和混合推薦三類,協同過濾演算法進一步劃分又可分為基於基於內存的推薦(memory-based)和基於模型的推薦(model-based),本文介紹的矩陣分解演算法屬於基於模型的推薦。
矩陣分解演算法的數學理論基礎是矩陣的行列變換。在《線性代數》中,我們知道矩陣A進行行變換相當於A左乘一個矩陣,矩陣A進行列變換等價於矩陣A右乘一個矩陣,因此矩陣A可以表示為A=PEQ=PQ(E是標准陣)。
矩陣分解目標就是把用戶-項目評分矩陣R分解成用戶因子矩陣和項目因子矩陣乘的形式,即R=UV,這里R是n×m, n =6, m =7,U是n×k,V是k×m。直觀地表示如下:
高維的用戶-項目評分矩陣分解成為兩個低維的用戶因子矩陣和項目因子矩陣,因此矩陣分解和PCA不同,不是為了降維。用戶i對項目j的評分r_ij =innerproct(u_i, v_j),更一般的情況是r_ij =f(U_i, V_j),這里為了介紹方便就是用u_i和v_j內積的形式。下面介紹評估低維矩陣乘積擬合評分矩陣的方法。
首先假設,用戶對項目的真實評分和預測評分之間的差服從高斯分布,基於這一假設,可推導出目標函數如下:
最後得到矩陣分解的目標函數如下:
從最終得到得目標函數可以直觀地理解,預測的分值就是盡量逼近真實的已知評分值。有了目標函數之後,下面就開始談優化方法了,通常的優化方法分為兩種:交叉最小二乘法(alternative least squares)和隨機梯度下降法(stochastic gradient descent)。
首先介紹交叉最小二乘法,之所以交叉最小二乘法能夠應用到這個目標函數主要是因為L對U和V都是凸函數。首先分別對用戶因子向量和項目因子向量求偏導,令偏導等於0求駐點,具體解法如下:
上面就是用戶因子向量和項目因子向量的更新公式,迭代更新公式即可找到可接受的局部最優解。迭代終止的條件下面會講到。
接下來講解隨機梯度下降法,這個方法應用的最多。大致思想是讓變數沿著目標函數負梯度的方向移動,直到移動到極小值點。直觀的表示如下:
其實負梯度的負方向,當函數是凸函數時是函數值減小的方向走;當函數是凹函數時是往函數值增大的方向移動。而矩陣分解的目標函數L是凸函數,因此,通過梯度下降法我們能夠得到目標函數L的極小值(理想情況是最小值)。
言歸正傳,通過上面的講解,我們可以獲取梯度下降演算法的因子矩陣更新公式,具體如下:
(3)和(4)中的γ指的是步長,也即是學習速率,它是一個超參數,需要調參確定。對於梯度見(1)和(2)。
下面說下迭代終止的條件。迭代終止的條件有很多種,就目前我了解的主要有
1) 設置一個閾值,當L函數值小於閾值時就停止迭代,不常用
2) 設置一個閾值,當前後兩次函數值變化絕對值小於閾值時,停止迭代
3) 設置固定迭代次數
另外還有一個問題,當用戶-項目評分矩陣R非常稀疏時,就會出現過擬合(overfitting)的問題,過擬合問題的解決方法就是正則化(regularization)。正則化其實就是在目標函數中加上用戶因子向量和項目因子向量的二范數,當然也可以加上一范數。至於加上一范數還是二范數要看具體情況,一范數會使很多因子為0,從而減小模型大小,而二范數則不會它只能使因子接近於0,而不能使其為0,關於這個的介紹可參考論文Regression Shrinkage and Selection via the Lasso。引入正則化項後目標函數變為:
(5)中λ_1和λ_2是指正則項的權重,這兩個值可以取一樣,具體取值也需要根據數據集調參得到。優化方法和前面一樣,只是梯度公式需要更新一下。
矩陣分解演算法目前在推薦系統中應用非常廣泛,對於使用RMSE作為評價指標的系統尤為明顯,因為矩陣分解的目標就是使RMSE取值最小。但矩陣分解有其弱點,就是解釋性差,不能很好為推薦結果做出解釋。
後面會繼續介紹矩陣分解演算法的擴展性問題,就是如何加入隱反饋信息,加入時間信息等。
㈢ python實現協同過濾推薦演算法,用的大一些的數據集就報錯MemoryError
python雖然易用,但是內存佔用比較多;所以如果你有C/C++/Java基礎,考慮用這些語言來實現;
CF演算法需要計算大量的相似度,如果能把中間結果存起來,或者簡化計算過程(如,你可能會重復計算一個item的均值)可以省下不少內存;(個人試過計算1w個用戶Pearson是沒問題的)
如果內存實在不夠用,那就用時間換空間,把中間計算結果分成小文件存到磁碟上,用的時候再讀取。
供參考。
㈣ 你好,在網上看你也在做基於用戶的協同過濾推薦演算法,我也在弄,能否向你請教不盛感激
額,我也是第一次做這方面的,本科畢業論文你懂得~
㈤ 基於用戶的系統過濾 什麼是推薦演算法
什麼是推薦演算法 推薦演算法最早在1992年就提出來了,但是火起來實際上是最近這些年的事情,因為互聯網的爆發,有了更大的數據量可以供我們使用,推薦演算法才有了很大的用武之地。 最開始,所以我們在網上找資料,都是進yahoo,然後分門別類的點進去,找到你想要的東西,這是一個人工過程,到後來,我們用google,直接搜索自己需要的內容,這些都可以比較精準的找到你想要的東西,但是,如果我自己都不知道自己要找什麼腫么辦?最典型的例子就是,如果我打開豆瓣找電影,或者我去買說,我實際上不知道我想要買什麼或者看什麼,這時候推薦系統就可以派上用場了。 推薦演算法的條件 推薦演算法從92年開始,發展到現在也有20年了,當然,也出了各種各樣的推薦演算法,但是不管怎麼樣,都繞不開幾個條件,這是推薦的基本條件 根據和你共同喜好的人來給你推薦 根據你喜歡的物品找出和它相似的來給你推薦 根據你給出的關鍵字來給你推薦,這實際上就退化成搜索演算法了 根據上面的幾種條件組合起來給你推薦 實際上,現有的條件就這些啦,至於怎麼發揮這些條件就是八仙過海各顯神通了,這么多年沉澱了一些好的演算法,今天這篇文章要講的基於用戶的協同過濾演算法就是其中的一個,這也是最早出現的推薦演算法,並且發展到今天,基本思想沒有什麼變化,無非就是在處理速度上,計算相似度的演算法上出現了一些差別而已。 基於用戶的協同過濾演算法 我們先做個詞法分析基於用戶說明這個演算法是以用戶為主體的演算法,這種以用戶為主體的演算法比較強調的是社會性的屬性,也就是說這類演算法更加強調把和你有相似愛好的其他的用戶的物品推薦給你,與之對應的是基於物品的推薦演算法,這種更加強調把和你你喜歡的物品相似的物品推薦給你。 然後就是協同過濾了,所謂協同就是大家一起幫助你啦,然後後面跟個過濾,就是大家是商量過後才把結果告訴你的,不然信息量太大了。。 所以,綜合起來說就是這么一個演算法,那些和你有相似愛好的小夥伴們一起來商量一下,然後告訴你什麼東西你會喜歡。 演算法描述 相似性計算 我們盡量不使用復雜的數學公式,一是怕大家看不懂,難理解,二是我是用mac寫的blog,公式不好畫,太麻煩了。。 所謂計算相似度,有兩個比較經典的演算法 Jaccard演算法,就是交集除以並集,詳細可以看看我這篇文章。 餘弦距離相似性演算法,這個演算法應用很廣,一般用來計算向量間的相似度,具體公式大家google一下吧,或者看看這里 各種其他演算法,比如歐氏距離演算法等等。 不管使用Jaccard還是用餘弦演算法,本質上需要做的還是求兩個向量的相似程度,使用哪種演算法完全取決於現實情況。 我們在本文中用的是餘弦距離相似性來計算兩個用戶之間的相似度。 與目標用戶最相鄰的K個用戶 我們知道,在找和你興趣愛好相似的小夥伴的時候,我們可能可以找到幾百個,但是有些是好基友,但有些只是普通朋友,那麼一般的,我們會定一個數K,和你最相似的K個小夥伴就是你的好基友了,他們的愛好可能和你的愛好相差不大,讓他們來推薦東西給你(比如肥皂)是最好不過了。
㈥ 請問下:誰有「基於用戶的協同過濾推薦演算法」的論文樣板呢
為您而做來。的
㈦ 協同過濾推薦演算法產生推薦結果要多久
這種形式一般可以按推薦引擎的演算法分,主要有基於協同過濾、基於內容推薦等演算法。 「買過此商品的人,百分之多少還買過其他啥啥商品」:協同過濾item-based filtering 「和你興趣相似的人,還買過其他啥啥商品」:協同過濾 user-based filtering 「相關商品推薦」:基於內容推薦content-based 「猜你喜歡」 一般混合使用推薦演算法。
㈧ 協同過濾,基於內容推薦有什麼區別
舉個簡單的小例子,我們已知道
用戶u1喜歡的電影是A,B,C
用戶u2喜歡的電影是A, C, E, F
用戶u3喜歡的電影是B,D
我們需要解決的問題是:決定對u1是不是應該推薦F這部電影
基於內容的做法:要分析F的特徵和u1所喜歡的A、B、C的特徵,需要知道的信息是A(戰爭片),B(戰爭片),C(劇情片),如果F(戰爭片),那麼F很大程度上可以推薦給u1,這是基於內容的做法,你需要對item進行特徵建立和建模。
協同過濾的辦法:那麼你完全可以忽略item的建模,因為這種辦法的決策是依賴user和item之間的關系,也就是這里的用戶和電影之間的關系。我們不再需要知道ABCF哪些是戰爭片,哪些是劇情片,我們只需要知道用戶u1和u2按照item向量表示,他們的相似度比較高,那麼我們可以把u2所喜歡的F這部影片推薦給u1。
根據數據源的不同推薦引擎可以分為三類
1、基於人口的統計學推薦(Demographic-based Recommendation)
2、基於內容的推薦(Content-based Recommendation)
3、基於協同過濾的推薦(Collaborative Filtering-based Recommendation)
基於內容的推薦:
根據物品或內容的元數據,發現物品或內容的相關性,然後基於用戶以前的喜好記錄推薦給用戶相似的物品
基於內容推薦的一個典型的例子,電影推薦系統,首先我們需要對電影的元數據有一個建模,這里只簡單的描述了一下電影的類型;然後通過電影的元數據發現電影間的相似度,因為類型都是「愛情,浪漫」電影 A 和 C 被認為是相似的電影(當然,只根據類型是不夠的,要得到更好的推薦,我們還可以考慮電影的導演,演員等等);最後實現推薦,對於用戶 A,他喜歡看電影 A,那麼系統就可以給他推薦類似的電影 C。
㈨ 推薦演算法的基於協同過濾的推薦
基於協同過濾的推薦演算法理論上可以推薦世界上的任何一種東西。圖片、音樂、樣樣可以。 協同過濾演算法主要是通過對未評分項進行評分 預測來實現的。不同的協同過濾之間也有很大的不同。
基於用戶的協同過濾演算法: 基於一個這樣的假設「跟你喜好相似的人喜歡的東西你也很有可能喜歡。」所以基於用戶的協同過濾主要的任務就是找出用戶的最近鄰居,從而根據最近鄰 居的喜好做出未知項的評分預測。這種演算法主要分為3個步驟:
一,用戶評分。可以分為顯性評分和隱形評分兩種。顯性評分就是直接給項目評分(例如給網路里的用戶評分),隱形評分就是通過評價或是購買的行為給項目評分 (例如在有啊購買了什麼東西)。
二,尋找最近鄰居。這一步就是尋找與你距離最近的用戶,測算距離一般採用以下三種演算法:1.皮爾森相關系數。2.餘弦相似性。3調整餘弦相似性。調整餘弦 相似性似乎效果會好一些。
三,推薦。產生了最近鄰居集合後,就根據這個集合對未知項進行評分預測。把評分最高的N個項推薦給用戶。 這種演算法存在性能上的瓶頸,當用戶數越來越多的時候,尋找最近鄰居的復雜度也會大幅度的增長。
因而這種演算法無法滿足及時推薦的要求。基於項的協同過濾解決了這個問題。 基於項的協同過濾演算法 根基於用戶的演算法相似,只不過第二步改為計算項之間的相似度。由於項之間的相似度比較穩定可以在線下進行,所以解決了基於用戶的協同過濾演算法存在的性能瓶頸。
㈩ 基於用戶的協同過濾推薦演算法怎麼實現
我手上恰好有這樣的一份文檔,