我想通过Matlab实现一个推荐系统,我选择MoveiLens Dataset和svm算法。 我实现了一个返回两组Items的函数。第一组是用户评价超过3的项目,第二组是用户评价小于4的项目。 Rate是一个包含3列的矩阵,第一个是用户ID,第二个是Item Id,第三个是此项目的User Rate。
function [like,dislike]=UsetLike(User,Rate)
k1=1;
k2=1;
for i=1:size(Rate,1)
if(Rate(i,1)==User)
if(Rate(i,3)>3)
like(k1)= Rate(i,2);
k1=k1+1;
end
if(Rate(i,3)<=3)
dislike(k2)= Rate(i,2);
k2=k2+1;
end
end
end
end
然后我写了另一个由svm训练的功能,比如这个。 特征是一个矩阵,在(i)行中显示项目(i)特征,其中包含19个具有0或1值的特征。
function [svmModel]=TrainSVM(like,dislike,Feture)
group1=zeros(size(like,2),19);
group2=zeros(size(dislike,2),19);
for i=1: size(group1,1)
group1(i,:)= Feture(like(i),:);
end
for i=1: size(group2,1)
group2(i,:)= Feture(dislike(i),:);
end
Dataset=cat(1,group1,group2);
group=[repmat({'like'},1,size(group1,1)) repmat({'dislike'},1,size(group2,1) )]';
svmModel = svmtrain(Dataset, group, ...
'Autoscale',true, 'Showplot',false, 'Method','QP', ...
'BoxConstraint',2e-1, 'Kernel_Function','rbf', 'RBF_Sigma',1);
end
现在我想知道我的解决方案是否正确?因为它主要是在3D空间中我无法接受它。如果我想使用Rate(1-5)而不是喜欢或不喜欢怎么办?
答案 0 :(得分:0)
为了使用Rate(1-5)作为输出信号,您需要一个名为排名SVM 的修改,因为这不仅仅是一个多标记分类,而是一个排名问题。< / p>