原始电影评分数据格式为:
User | Item | Rating |
1 | 2 | 3.0 |
2 | 5 | 4.0 |
3 | 4 | 2.0 |
3 | 6 | 5.0 |
目的是转成以下矩阵形式:
(我了解到的.mat格式的矩阵,行列号都是固定好的,我不晓得怎么改成我想要的形式,所以对于以上评分数据,我没有转成3*4的矩阵,而是转成3*6的矩阵,对于用户没有评分过的物品,设置为0)
item1 | item2 | item3 | item4 | item5 | item6 | |
user1 | 0.0 | 3.0 | 0.0 | 0.0 | 0.0 | 0.0 |
user2 | 0.0 | 0.0 | 0.0 | 0.0 | 4.0 | 0.0 |
user3 | 0.0 | 0.0 | 0.0 | 2.0 | 0.0 | 5.0 |
步骤(matlab实现):
首先,将rating.csv文件按照数值矩阵的形式导入,第一列是用户,第二列是物品,第三列是评分值,形式如下
其次,定义一个函数,保存为s.m文件
function y = s(testData1,a,b) %testData1是要转换的.csv文件,导入到matlab中,是以数值矩阵的形式存在的,如上图所示
n1 = length(testData1(:,1));
for i = 1:n1
if(testData1(i,1)==a && testData1(i,2)==b) %如果第一列的值等于用户,第二列的值等于物品,则第a行,第b列的值就可以用第三列的值填充。(第a行对应着用户a,第b列对应着物品b)
y = testData1(i,3);
break
else
y = 0;
end
end
end
最后,调用.m文件即可
% a = unique(trainData2(:,1));
% b = unique(trainData2(:,2));
testData = zeros(943,1682); %(a=943,b=1682)
for i = 1:943
for j = 1:1682
testData(i,j)= s(testData1,i,j);
end
end