您好,欢迎来到微智科技网。
搜索
您的当前位置:首页基于用户CF协同过滤算法matlab代码

基于用户CF协同过滤算法matlab代码

来源:微智科技网
a.txt

2,8,3.0 2,26,4.0 2,27,4.0 2,35,4.0 2,42,3.0 2,66,5.0 2,67,2.0 2,69,4.0 2,85,3.0 2,101,5.0 2,108,4.0 2,113,3.0 2,117,5.0 4,145,2.0 5,152,5.0 5,4,5.0 6,75,5.0 7,181,5.0

dataset.m

function[B]=dataset(A) for i=1:10000

B(A(i,1),A(i,2))=A(i,3); end

process.m

load Netflix.mat; [t1,t2]=size(B); user_sim=[]; for i=1:t1-1 for j=i+1:t1

user_sim(i,j)=simliarity(B,i,j); user_sim(j,i)=user_sim(i,j);

end end

num_predict=0;

number=[30];%[10 20 30 40 50 60 70 80]; pre_rating=0;

for p=1:length(number) sum_erro=0; MAE=0; RMSE=0;

sum_RMSE_erro=0; load('testRating.txt'); for i=1:length(testRating)

pre_rating=predict(B,user_sim,testRating(i,1),testRating(i,2),nu

mber(p));

if (pre_rating~=0)

num_predict=num_predict+1; end

sum_erro=sum_erro+abs(pre_rating-testRating(i,3));

sum_RMSE_erro=sum_RMSE_erro+(pre_rating-testRating(i,3))^2;

if testRating(i,2)==8 testRating(i,1) testRating(i,2) testRating(i,3) pre_rating end end

fprintf(' CF 邻居个数等于30 的平均预测误差是:\\n\\n'); MAE=sum_erro/num_predict

RMSE=sqrt(sum_RMSE_erro/num_predict) coverage=num_predict/length(testRating) end

simliarity.m

function [sim]=simliarity(B,tar_user_id,pre_user_id) [t1,t2]=size(B);

co_rating_number=0; co_item=[]; sum_tar_user=0; sum_pre_user=0; avg_tar_user=0; avg_pre_user=0; for j=1:t2

if (B(tar_user_id,j)~=0) && (B(pre_user_id,j)~=0) co_rating_number=co_rating_number+1; sum_tar_user=sum_tar_user+B(tar_user_id,j); sum_pre_user=sum_pre_user+B(pre_user_id,j); co_item(1,co_rating_number)=j; end end

if (co_rating_number==0) sim=0; else

avg_tar_user=sum_tar_user/co_rating_number; avg_pre_user=sum_pre_user/co_rating_number; numerator=0;%分子 denominator1=0; denominator2=0;

denominator=0;%分母 for i=1:co_rating_number item_id=co_item(1,i);

1

numerator=numerator+(B(tar_user_id,item_id)-avg_tar_user)*(B(pre_user_id,item_id)-avg_pre_user);

denominator1=denominator1+(B(tar_user_id,item_id)-avg_tar_user)^2;

denominator2=denominator2+(B(pre_user_id,item_id)-avg_preelse

avg_tar=sum_tar/num_tar; end

for i=1:num_neib

%计算预测用户的平均评分 pre_use_id=users(i,1); _user)^2; end

denominator=sqrt(denominator1)*sqrt(denominator2); if (denominator==0) sim=0; else

sim=numerator/denominator; end end

predict.m

function [ pre_rating ] predict( B,user_sim,tar_user_id,tar_item_id,nu ) %首先,找出对目标项目有过评分的用户users [t1,t2]=size(B); n=0; users=[]; for i=1:t1

if (B(i,tar_item_id)~=0) && (i~=tar_user_id) n=n+1;

users(n,1)=i;

users(n,2)=user_sim(i,tar_user_id); end end

users=sort_weight(users);

num_neib=nu;%设置邻居个数 if num_neib>n num_neib=n; end %预测

numerator=0;%分子 denominator=0;%分母

%计算目标用户的平均评分 sum_tar=0; num_tar=0; avg_tar=0; for j=1:t2

if B(tar_user_id,j)~=0 num_tar=num_tar+1;

sum_tar=sum_tar+B(tar_user_id,j); end end

if num_tar==0 avg_tar=0;

sum_pre=0; num_pre=0; avg_pre=0; for j=1:t2

if B(pre_use_id,j)~=0

num_pre=num_pre+1;

sum_pre=sum_pre+B(pre_use_id,j); end end

if num_pre==0 =

avg_pre=0; else

avg_pre=sum_pre/num_pre; end

numerator=numerator+users(i,2)*(B(pre_use_id,tar_item_id)-avg_pre);

denominator=denominator+abs(users(i,2)); end

if denominator==0 pre_rating=0; else

pre_rating=avg_tar+numerator/denominator; end

2

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务