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

 运用到原问题上,即为:

 

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值