本例項為實現史丹福大學吳恩達老師第9周16章推薦系統之協同過濾演算法
吳恩達老師課件中關於協同過濾演算法的總結:
假設電影**商有5部電影和4個使用者,使用者評價了其中某一部分電影,現需**使用者對其餘為評價電影的評分
u1u2
u3u4m15
500m2
5??0
m3?40
?m400
54m50
05?根據上述演算法總結,使用matlab,可以實現上述演算法。 (注:本例使用的是最基本的gradient descent)
完整**如下:
%% input parameter
nu=4;%使用者數
nm=5;%電影數量
n=3;%電影特徵數
y=[5,5,0,0;
5,-1,-1,0;
-1,4,0,-1;
0,0,5,4;
0,0,5,-1]; %y(i,j)表示使用者j對電影i的評分;-1表示對電影沒有進行評分
r=ones(nm,nu);
idx=find(y==-1);
r(idx)=0;
lambda=0.1;%正則化引數
alpha=0.01;%學習率
%% first:initialize x and theta
%這裡必須採用隨機初始化
x=rand(nm,n);%電影的特徵向量
theta=rand(nu,n);%使用者的引數向量
%% second:use gradient descent
j=0;%初始化代價函式為0;
x_grad=zeros(size(x));
theta_grad=zeros(size(theta));
loop=5e4;
for k=1:loop
predict=(x*theta').*r;
%代價函式
j=1/2*sum(sum((predict-y) .^ 2))+lambda/2*sum(sum(theta .^ 2))+lambda/2*sum(sum(x .^ 2));
fprintf('j= %d\n', j);
for i=1:nm
index=find(r(i,:)==1);%找出每一行評價了的索引
thetatemp=theta(index,:);
ytemp=y(i,index);
x_grad(i,:)=(x(i,:)*thetatemp'-ytemp)*thetatemp+lambda* x(i, :);
x(i,:)=x(i,:)-alpha*x_grad(i,:);
endfor i=1:nu
index=find(r(:,i)==1);%找出每一列評價了的索引
xtemp=x(index,:);
ytemp=y(index,i);
theta_grad(i,:)=(xtemp*theta(i,:)'-ytemp)'*xtemp+lambda*theta(i,:);
theta(i,:)=theta(i,:)-alpha*theta_grad(i,:);
endend%% third: predict
ypredict=x*theta';
%% calculate the square error
index= find(r== 1);
s_error_mat= (ypredict- y).^2;
s_error= sum(s_error_mat(index));
機器學習 協同過濾
在現今的推薦技術和演算法中,最被大家廣泛認可和採用的就是基於協同過濾的推薦方法。本文將帶你深入了解協同過濾的秘密。下面直接進入正題 1 什麼是協同過濾 協同過濾是利用集體智慧型的乙個典型方法。要理解什麼是協同過濾 collaborative filtering,簡稱 cf 首先想乙個簡單的問題,如果...
協同過濾演算法
3種形式的協同過濾 collaborative filtering 演算法 1 user based 相同 相似 使用者的喜好相同 2 item based 能夠引起使用者興趣的專案,必定與其之前評分高的專案相似 3 model based 先用歷史資料得到乙個模型,再用此模型進行 參考 這個位址是...
協同過濾演算法
1.表示使用者行為矩陣,即統計使用者購買某種商品型別的數量 public double getnumbycustomer customer customer return vectore 2.用余弦距離計算每個使用者與其它使用者的行為相似度 下面 是兩個使用者之間的相似度,進行遍歷就可以獲取全部相似...