��976 2021-11-13 10:04 采纳率: 86.7%
浏览 59
已结题

matlab中的k-fold 交叉验证问题,怎么添加一个for循环和网格搜索?


 
function [R,RMSE,rmse,r,rr,MRE,RSD] = pls_cv (traindata, trainlab,k)
for j=1:50
index = crossvalind( 'Kfold', length(trainlab) , k );
Yexp = [];
Ypred = [];
for i = 1 : k
    test= (index == i); 
    train = ~test;
    x= traindata( train, :);
    y = trainlab( train );
    xt = traindata( test, :);
    yt = trainlab( test );
    model=pls(x,y,7,0);
    Yt1=xt*model(7,:)';
    Yexp = vertcat(Yexp, yt );
    Ypred = vertcat(Ypred, Yt1);
end
R = corrcoef(Ypred, Yexp);
r(j) = R(1,2);
RMSE(j)=sqrt(mse(Ypred - Yexp));  
rmse=mean(RMSE);
rr=mean(r);
MRE=mean(abs(Ypred - Yexp)./Yexp);
RSD=std(Ypred);
end
 

想添加一个循环,优化模型model=pls(x,y,7,0)中的潜在变量(第三个参数,目前取7,可以优化),想做到给定一个区间,如[1 20],从该区间内挨个取值并计算,最后看rr和rmse,rr越大,rmse越小,则参数越优,在哪添加一个for循环做到在区间内取值挨个试,还有怎么添加一个网格搜索或者随机搜索找到最优的潜在变量参数值。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月21日
    • 创建了问题 11月13日

    悬赏问题

    • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
    • ¥15 求caverdock使用教程
    • ¥15 Coze智能助手搭建过程中的问题请教
    • ¥15 12864只亮屏 不显示汉字
    • ¥20 三极管1000倍放大电路
    • ¥15 vscode报错如何解决
    • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
    • ¥15 python随机森林对两个excel表格读取,shap报错
    • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
    • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。