SVD在推薦系統中的應用

來源:互聯網
上載者:User
%svd chengxu A = [5 5 0 5;5 0 3 4; 3 4 0 3; 0 0 5 3; 5 4 4 5; 5 4 5 5];A = A';[U S V] = svd(A);U = U(:,1:4);S = S(1:4,1:4);V = V(:,1:4);reA = U*S*V';%give one new userbob = [5 5 0 0 0 5];uservector = bob*V*S;for i = 1:1:size(A,1)    temp = U(i,:);    similarity = temp*uservector'/(sqrt(temp*temp')*sqrt(uservector*uservector'));    userlist(i) = similarity;endrank = sort(userlist);l = size(rank,2);t = zeros(1,size(A,2));for i=l:-1:l-1    indx = find(rank(i)==userlist);    sim = rank(i);    t = t + A(indx,:)*sim;endindex = find(bob==0);rank = t(index);rank

matlab的代碼很簡單,因為有現場的svd函數可以使用

首先進行svd分解,之後我們會得到U,S,V三個矩陣

個人是這麼理解的

如果在最初的矩陣中:列代表item而行代表了user

那麼u則代表了user和中間量的關係,V代表了item與中間量的關係

S代表了不同中間量在期中所佔的比重,或者是貢獻。

這個中間量,我們可以理解為是item和類別,例如電影我們可以分為喜劇或者等等。

這就產生了一個附帶產品

我們可以根據U和V對user和item進行聚類。這個以後再說

下面我們來了一個新的使用者,我們知道它的一些資訊,

那麼,我們可以通過V和S把使用者的資訊映射到U相同的平面

然後計算新使用者和Old user的相似性

通過老使用者對item的興趣,計算新使用者對沒有見過的item的興趣程度

對這個結果rank後,即使最終推薦的順序。

參看:

http://blog.csdn.net/abcjennifer/article/details/8131087

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.