協同過濾演算法的實現 機器學習史丹福大學吳恩達老師

2021-08-27 08:07:21 字數 1830 閱讀 1688

本例項為實現史丹福大學吳恩達老師第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.用余弦距離計算每個使用者與其它使用者的行為相似度 下面 是兩個使用者之間的相似度,進行遍歷就可以獲取全部相似...