我想用Matlab实现一个推荐系统,选择MoveiLens数据集和svm算法。我实现了一个返回两组项的函数。第一组是用户评等大于3的项,第二组是用户率小于4的项。比率是具有3列的矩阵,第一组是用户Id,第二组是项Id,第三组是该项的用户率。
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来训练,就像这样。Feature是(i)行中显示item (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空间,所以我无法指教它。如果我想使用速率(1-5)而不是喜欢或不喜欢呢?
发布于 2014-01-22 22:09:33
为了使用速率(1-5)作为输出信号,您将需要一个名为等级支持向量机的修改,因为这不仅仅是一个多标签分类,而是一个排序问题。
https://stackoverflow.com/questions/21253881
复制相似问题