matlab簡單實現SVD的推薦

2022-03-25 16:28:10 字數 1221 閱讀 3656

%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 user

bob = [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後,即使最終推薦的順序。

參看:

基於matlab的矩陣奇異值(SVD)分解

目錄 1 計算原理 1.1求解v 1.2求解d 1.3求解u 2 matlab程式 2.1 注意 3 設矩陣a的大小m n m n a ud 首先求出的特徵值及特徵值的特徵值從大到小按順序排列,對應的正交特徵向量也要按特徵值的順序排列。排列好的正交的特徵向量即為v v1,v2 其中v1為非零特徵值的...

Hog特徵的簡單實現 matlab

hog特徵的簡單實現 針對hog特徵不做過多的解釋 可參考其他博主的原理介紹。本文是matlab版本的實現。該版本的hog特徵將影象resize為64 128 首先將rgb轉灰度圖 再進行伽馬校正 對伽馬校正後的影象做歸一化處理 為什麼這樣做,請參看其他博主具體的原理介紹 伽馬校正使用的是 open...

SpringBoot實現ES簡單搜尋和推薦

es高階客戶端 public resthighlevelclient resthighlevelclient public list query add the list data.add sourcemap catch ioexception e return data title的型別是 typ...