基於協同過濾推薦系統的數據稀疏性問題研究
A. 推薦系統的數據稀疏性怎麼解決
可以用spark streaming實時處理,直接讀取你的數據(或埠讀取,或保存到本地讀取本地數據處理)
B. 協同過濾,基於內容推薦有什麼區別
舉個簡單的小例子,我們已知道
用戶喜歡的電影是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。
C. 如何解決協同過濾的數據稀疏問題
以對原始的評分數據集進行變換,用評分值相對於平均評分值的偏差取代原始值,如基於物品過濾的數據預處理Amazon.com採用物品間
D. 基於協同過濾的推薦系統的資料庫在什麼環境平台構建
大體試用了一下三個系統,得出了一個比較粗淺的結論: 、phpcms: phpcms自2007版本開源以後才開始引起廣泛關注,但這次也是頭一次研究。用了幾天,有了一點初步的印象。(以下以2007版為例,2008版尚未正式推出) 粗看起來,phpcms 2007是三者中最為完善的,各項功能考慮的很細致,導致進了新手進了後台先要暈半天才行。各項功能,比如UNIX系統的許可權、模版修改、廣告、商城、信息、單網頁。。。。都做的相當的完備了。 發表文章的關鍵字、作者、來源、自動遠程圖片保存等等,都做的不錯。但是,phpcms發表文章的摘要,似乎是只能自動截取,不能手工設置,靈活性欠佳。 發表的文章可以通過關鍵字來索引相關貼,做的不錯。 支持通行證方式進行論壇和其它系統的整合,可以進行正向和反向兩種方式的整合。但是文檔說的不太清楚,研究了半天才成功。但是反向整合pw5.0.1登錄後自動跳轉不回來。 phpcms 2007的後台安排的太瑣碎,看的頭暈。發一篇文章也要暈半個鍾頭,而且首頁的更新莫不清規律,幻燈片老半天不更新。 phcms盡管功能很強大,但是卻缺少一樣重要的東西:可視化的模版工具,這也是php168和dedecms共同的缺點。在這方面,他們甚至不如剛剛起步的DiyPage好,DiyPage只是一個剛剛具備了雛形的CMS系統,卻擁有一個很方便的後台可視化界面設計工具,即使是菜鳥也可以輕松設計界面(雖然靈活性沒那麼強大,但是足夠你用了)。 phpcms 2007整體以頻道為依據進行組織,即使你不想用頻道,哪也得用,這個已經由不了你了 。所以如果僅僅是一個比較簡單的網站,也用上一個頻道,看起來夠別扭的,這是phpcms 2007最大的缺點,不過看了phpcms 2008beta2發現,phpcms終於解除了這個垃圾限制。 發現phpcms的廣告功能似乎不完善,一個廣告位定義了兩個廣告,不能自動輪換,總是顯示第一個。 phpcms雖然實現了模塊化,但是不管你用不用,一大堆模塊稀里呼嚕就裝上了,看起來很不爽,也不直觀。 phpcms雖然是很早就是商業化運作的軟體,然後開發效率卻是不高,新版本屢屢跳票,影響了它的產品形象,讓開源以來積累的人氣和一些擁躉大失所望。然而最近貼上了六間房以後,資金應該是沒有壓力了,新版本也開始浮出水面,2008beta1已經發布了,可惜問題多多。 phpcms 2008 beta2 在 MySQL4 上還是有使用問題,不過比beta1強一些,beta1直接就安裝不了,不知道正式版是否會正式放棄MySQL4。 phpcms 2008beta2看上去不錯,新功能令人振奮的,界面清爽。以前一團亂麻的後台界面已經打掃干凈了。phpcms 2008的標簽採用了中英文混合的方式,對菜鳥來說更加容易上手,比較新穎。另外,beta2好像是實現了類似php168的可視化模版中的標簽設置方式,雖然不是可視化的設計模版,總歸可以自定義一些元素樣式了。不過這個beta2版也還是頂多算是個預覽版,BUG極多,功能不全。如果准備用phpcms的話,怕是還要大大的等幾天才行。 另外,phpcms官方論壇對免費版的支持很不到位,傷了很多粉絲的心。 2、dedecms 5.1應該是dedecms正式商業化運作以後推出的第一個版本吧?以前的dedecms個體作坊式的發展,由於作者兼職時間和精力不足,導致發展緩慢,新版本頻頻跳票,引起廣大粉絲的強烈不滿,甚至導致柏拉圖和dedecms用家之間的語言沖突。然而dedecms在商業化運作以後,新版本的發布周期大大縮短,產品功能不斷改進,界面美化了很多,人氣和用戶數量大大增長了,現在看發展勢頭不錯。 dedecms的根目錄是最簡單的,只有幾個文件,比以上兩個都強多了,其實這樣不僅看起來清爽,維護起來也方便,值得表揚 dedecms的頻道非常費解,看起來只有頻道模型,要增加頻道就要添加模版文件有點費解,仔細研究發現,這個dedecms其實和php168的方式差不多,任何欄目都可以添加子目錄,綁定域名,其實就和頻道是一個意思,欄目和頻道可以互相轉換。 dedecms的通行證只支持反向整合,就是dedecms可以用服務端的用戶數據登錄。其實所謂整合,一般也就是這樣的。論壇用整站用戶數據的情況恐怕極為少見,對論壇管理也不利。 但是dedecms的通行證整合,需要修改論壇文件,不明白為啥要這樣,是因為論壇的通行證功能還不完善嗎? dedecms的廣告管理用起來比較麻煩,要先定義標簽,然後手工在模板中插入。好像模版上沒預定義好廣告位置,實在是太不應該了。。。。相當於手動操作,不符合當今歷史潮流啊。而且大家常用的廣告自動輪換功能,也沒有實現。 試用發現,dedecms有時還有一些小毛病,比如遠程附件功能,有時發現無法自動轉存到本地。另外,在模塊數量上,dedecms也無法和php168和phpcms相比,只有文章、下載、圖片、Flash等基本的功能,不知道dedecms 2007發布以後能否有所改觀 dedecms的相關文章、熱點文章等功能,用了靜態生成的方式直接寫入到了HTML文件中,這樣在生成HTML後,無法自動更新,需要經常手工重新生成全部HTML才能更新相關文檔和熱點文檔。但是大量的重復生成所有HTML文件效率太低下了,這方面dedecms不如php168最新添加的相關文章功能,是用JS方式實現的,不需要更新HTML就能自動索取最新的相關文章。但是使用JS方式也存在伺服器效率的問題。 dedecms的首頁、列表頁、還有文章頁都使用了單獨的模板,沒有使用header和footer模板,這樣的好處是可以產生各種風格的頁面(允許首頁、列表頁、內容頁使用不同的風格),但是缺點是修改添加頭部和底部廣告、導航條的時候,相當費勁,要一個一個模板的修改。而且dedecms的版權聲明欄位設置太小,只有250位元組,寫不進去多少內容,頂多能添加個計數器就不錯了。 dedecms起步就用了類似XML標簽方式,而且官方還提供了Dreamweaver的插件來識別標簽,應該說在國內是比較獨到的。但是這種方式也需要新手一定的時間才能適應。同時,dedecms一直缺乏比較完善的文檔,也進一步加大了菜鳥上手的難度。 dedecms最大的問題就是沒有提供類似Diypage的可視化設計方式,因為標簽比較難於上手,對新手來說做模板是很頭疼的問題。 dedecms 5.1比4.0功能有了很多進步,增加DIGG功能,還有類似分類信息之類的功能都實現了。不過也有退步,比如關鍵詞、相關帖功能都嚴重退步了,發帖也很不方便,而且dedecms在商業版本和免費版本之間做功能和代碼區分,也自然會在免費版本上有所縮水。 dedecms商業化發展以後,目前出現的問題是免費版的技術支持做的不太到位,比phpcms強不了多少
E. 協同過濾中的可擴展性問題是什麼
協同過濾演算法能夠容易地為幾千名用戶提供較好的推薦,但是對於電子商務網站,往往需要給成百上千萬的用戶提供推薦,這就一方面需要提高響應時間的要求,能夠為用戶實時地進行推薦;另一方面還應考慮到存儲空間的要求,盡量減少推薦系統運行的負擔。
1.3 可擴展性問題
在協同過濾推薦演算法中,全局數值演算法能及時利用最新的信息為用戶產生相對准確的用戶興趣度預測或進行推薦,但是面對日益增多的用戶,數據量的急劇增加,演算法的擴展性問題(即適應系統規模不斷擴大的問題)成為制約推薦系統實施的重要因素。雖然與基於模型的演算法相比,全局數值演算法節約了為建立模型而花費的訓練時間,但是用於識別「最近鄰居」演算法的計算量隨著用戶和項的增加而大大增加,對於上百萬的數目,通常的演算法會遇到嚴重的擴展性瓶頸問題。該問題解決不好,直接影響著基於協同過濾技術的推薦系統實時向用戶提供推薦問題的解決,而推薦系統的實時性越好,精確度越高,該系統才會被用戶所接受。
基於模型的演算法雖然可以在一定程度上解決演算法的可擴展性問題,但是該類演算法往往比較適於用戶的興趣愛好比較穩定的情況,因為它要考慮用戶模型的學習過程以及模型的更新過程,對於最新信息的利用比全局數值演算法要差些。
分析以上協同過濾在推薦系統實現中面臨的兩個問題,它們的共同點是均考慮到了最近鄰居的形成問題(包括用戶信息獲得的充分性、計算耗費等)。但是應該看到協同過濾在推薦系統的實現中,要獲得最近鄰居用戶,必須通過一定的計算獲得用戶之間的相似度,然後確定最佳的鄰居個數,形成鄰居用戶集。而在這一過程中,如果對全部數據集進行相似性計算,雖然直接,但是運算量和時間花費都極大,無法適應真實的商務系統。如果通過對訓練集數據(整個數據集的某一子集)進行實驗獲得,雖然不必對整個數據集進行計算,但是必須通過將多次實驗結果統計出來才可能得到,這無疑也增加了推薦結果獲得的代價和誤差。並且如果考慮到數據集的動態變化,這一形成最近鄰居用戶集技術的實際應用價值越來越小。因此,考慮使用更為有效的最近鄰居用戶形成辦法,對於協同過濾的應用非常必要。
F. 矩陣分解在協同過濾推薦演算法中的應用
矩陣分解在協同過濾推薦演算法中的應用
推薦系統是當下越來越熱的一個研究問題,無論在學術界還是在工業界都有很多優秀的人才參與其中。近幾年舉辦的推薦系統比賽更是一次又一次地把推薦系統的研究推向了高潮,比如幾年前的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取值最小。但矩陣分解有其弱點,就是解釋性差,不能很好為推薦結果做出解釋。
後面會繼續介紹矩陣分解演算法的擴展性問題,就是如何加入隱反饋信息,加入時間信息等。
G. 推薦系統的研究主要包括哪些方面
推 薦系統的研究主要包括以下幾個方面:
(1)用戶信息獲取和建模。
早期的內推薦系統只需獲取簡單的用戶容信息,隨著推薦系統 發展, 推薦系統由簡單的信息獲取轉變為和用戶交互的系統, 需要考慮用戶多興趣和用戶興 趣轉變的情況,將數據挖掘應用到用戶信息獲取中,挖掘用戶的隱性需求。
(2)推薦演算法研究。
要實現被顧客接受和認可的個性化推薦,設計准確、高效率的個 性化推薦演算法是核心。基於內容的推薦和協同過濾是最主要的兩種。為了克服各自的缺點, 可以將各種推薦方法混合使用,以提高推薦精度和覆蓋率。同時,信息獲取和人工智慧,以 及模糊推薦等相關領域的引入擴寬了推薦演算法的思路。
(3)推薦系統的評價問題。
要使推薦系統為廣大用戶所接受,必須對推薦系統作出客 觀綜合的評價。 推薦結果的准確性和可信性是非常重要的兩個方面。 如何對推薦結果的准確 性進行判定, 如何把推薦結果展示給用戶以及如何獲取用戶對推薦結果的評價都是需要深入 研究的問題。
(4) 推薦系統的應用和社會影響研究。
需要建立推薦系統在其他應用領域的應用框架, 研究如何與企業其它信息系統的集成。
H. 誰有基於用戶的推薦系統或者協同過濾的演算法和代碼分析
個大數據的大神給個 基於用戶的推薦系統或者協同過濾的演算法和代碼分析啊
我有部分代碼但是不知道怎麼在Eclipse上實現 求解答啊
1.public class AggregateAndRecommendRecer extends Recer<VarLongWritable,VectorWritable,VarLongWritable,RecommendedItemsWritable>{
...
public viod rece (VarLongWritable key,Iterable<VectorWritable>values,Context context)throws IOException,InterruptedException{
Vector recommendationVector=null;
for(VectorWritable vectorWritable:values){
recommendationVector=recommendationVector==null?
vectorWritable.get();
recommendationVector.plus(bectorWritable.get());
}
Queue<RecommendedItem> topItems=new PriorityQueue<RecommendedItem>(recommendationsPerUser+1,Collections.reverseOrder(.getInstance()));
Iterator<Vector.Element> recommendationVectorIterator=recommendationVector.iterateNonZero();
while(recommendationVectorIterator.hasNext()){
vector.Element element=recommendationVectorIterator.next();
int index=element.index();
I. 降噪自動編碼推薦系統中會有數據稀疏的問題嗎
編碼公式為=A2&"-"&B2&"-"&C2&"-"&TEXT(G2,"yyyymmdd")&"-"&H2