matlab能不能协同过滤,【机器学习】Matlab_推荐系统协同过滤算法

【机器学习】Matlab_推荐系统协同过滤算法

发布时间:2018-06-24 18:12,

浏览次数:466

, 标签:

Matlab

【机器学习】Matlab_推荐系统协同过滤算法

写在前面:本文根据自己数据挖掘的课程作业整理,结合吴恩达机器学习的课程。

吴恩达课程课件中关于协同过滤算法的总结:

根据上述算法总结,使用Matlab,可以实现上述算法。

测试用到的数据是我的作业中的数据:

该算法实现起来不难,我使用的是最基本的Gradient Descent(当然可以使用其他更加高级的方法),那么代码主要就在于Gradient

Descent的实现。

另外,初始化参数一定要记得随机初始化。

完整的Matlab代码如下,各个步骤注释均有说明:

clear; %% Input useful parameters % 电影特征维数 m= 4; % 用户数 nu= 8; % 电影数 nm= 7; Y= [

4,4,-1,-1,1,1,5,-1;5,5,-1,1,-1,-1,-1,-1;-1,4,1,-1,-1,1,5,4;5,-1,2,5,-1,1,2,-1;1

,-1,5,4,5,-1,-1,1;1,-1,5,-1,-1,4,-1,-1;-1,1,-1,5,-1,5,1,-1]; R= ones(nm, nu);

index=find(Y== -1); R(index)= 0; % 正则化参数 lambda= 0.1; % 学习率 alpha= 0.01; %%

Initialize % Random X = randn(nm, m); Theta = randn(nu, m); % Not random which

can't get right result % c= 3; % X = c* ones(nm, m); % Theta = c* ones(nu, m);

%% Gradient Descent J = 0; X_grad = zeros(size(X)); Theta_grad = zeros(size

(Theta)); num_iter=50000; for k= 1:num_iter 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 idx= find(R(i,:)==1); thetatemp=

Theta(idx,:); Ytemp= Y(i, idx); X_grad(i,:)= (X(i,:)*thetatemp'- Ytemp)*

thetatemp+ lambda* X(i, :); %X(i,:)= X(i,:)- alpha* X_grad(i,:); end X=

X-alpha* X_grad;for i= 1:nu idx= find(R(:,i)== 1); Xtemp= X(idx,:); Ytemp=

Y(idx,i); Theta_grad(i,:)=(Xtemp*Theta(i,:)'-Ytemp)'*Xtemp+lambda*Theta(i,:);

%Theta(i,:)= Theta(i,:)- alpha* Theta_grad(i,:); end Theta=

Theta-alpha*Theta_grad;end %% predict Y_pred= X* Theta'; %% calculate the

square error idx= find(R== 1); s_error_mat= (Y_pred- Y).^2; s_error=

sum(s_error_mat(idx));%% Code for calculate similarity % msimi= zeros(7, 1); %

for i= 1:7 % msimi(i)= norm(X(i,:)- X(1,:)); % end % msimi= zeros(7, 1); % for

i= 1:7 % msimi(i)= norm(X(i,:)- X(5,:)); % end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值