Debug 路漫漫-01

运行到子函数时提示报错:

 ===

这个断点一步步debug下来是顺利的,但是咋就超出数组范围了呢,这会是什么问题。

——sess肯定超过索引了,那个sess(:,2)的值肯定超过V的行数了。

——由右图可知:V只有1842行,而cellD里面包含的肯定不止, 看是V错了, 还是cellD错了。

V的行数是整个数据集的所有item数目没错。而cellD的行数则是训练集的所有session数。

I mean:cellD里面包含的,每次肯定只能传cellD其中的一个元胞,把cellD里面每个元胞的最大值输出, 肯定有比1842大的,那么 怎么产生的问题就在哪了。

那么:把sess(:,2)最大值输出 和V的行比较即可见分晓:

  

【原因】baseline里,原来生成的session.mat里面,userid、itemid是有重新编号的!!!按矩阵行序给userid和itemid编号的!!!

 所以,回到数据预处理部分:

问题转变为:

以下rawData数据,第一列是userID,第二列是winner,第三列是loser。

现在要给它们的序号重排。userID 的序号重排是比较简单的。但是关于winner和loser这二者都是来自itemset,要将它们映射到同一个itemset,利用numunique可以操作吗?

代码文件如下:

% --userid,winner,loser
rawData=[1 2 3; 
                1 3 4;
                1 3 5;
                3 4 7;
                3 4 2;
                3 5 6];
%统计user数目
[userSet,p] = numunique(rawData(:,1));
for i = 1:length(userSet)
    rawData(p{i},1) = i;
end
userNum = length(userSet); 


%统计item数目---------原先
item1 = rawData(:,2);
item2 = rawData(:,3);
allItem = [item1', item2'] %合并所有item。
% 结果为:1×12double:2     3     3     4     4     5     3     4     5     7     2    6

unique_allItem = unique(allItem) % 对所有item去重并排序。
% 结果为:unique_allItem = 2     3     4     5     6     7 ,共6个

for i =1:length(unique_allItem)
  reSetAllItem (i) = i;
end
% 重新编号,从1开始。
% reSetAllItem 结果为:reSetAllItem = 1     2     3     4     5     6,共6个

itemNum = length(reSetAllItem)

%利用combine矩阵,将原来的itemid与重排后的itemid对应起来。
combine = [unique_allItem',reSetAllItem']
% combine的结果为:
% combine =
%      2     1
%      3     2
%      4     3
%      5     4
%      6     5
%      7     6

%在combine矩阵查找,更新rawData的对应元素
for i = 1:length(rawData)
    for j = 1:length(combine)
       if rawData(i,2)==combine(j,1)          
          rawData(i,2) = combine(j,2);
       end
       if rawData(i,3)==combine(j,1)          
          rawData(i,3) = combine(j,2);
       end
    end    
end
rawData
% rawData的结果为:
% rawData =
%      1     1     2
%      1     2     3
%      1     2     4
%      2     3     6
%      2     3     1
%      2     4     5

 运用到原问题上,即为:

原文地址:https://www.cnblogs.com/shenxiaolin/p/9366342.html