所以我正在尝试对数据集执行k-fold交叉验证,但是在接受输入时遇到八度音阶问题。首先我尝试使用嵌套的平方损失函数来运行fminunc,但是Octave只是说它还不支持。我的下一次尝试有一个squaredLoss函数文件,该文件作用于我每次在主函数中更改的全局数据集,但它不断抛弃数据集未定义。由于我无法将数据集作为参数传递给fminunc,我应该如何解决这个问题(或者我使用全局错误?)
for i = 1:NUMBER_OF_FOLDS
global funcdata;
funcdata = data{i};
[theta(i), ~] = fminunc(squaredLoss, theta0);
endfor
squaredLoss(theta)
使用funcdata
,就好像它是一个局部变量。任何帮助将不胜感激!
答案 0 :(得分:0)
好的,看起来虽然Octave不支持嵌套函数,但您可以使用匿名函数see here。因此,我给出的示例的解决方案是:
function loss = squaredLoss(coef, funcdata)
...
endfunction
用于squaredLoss
函数文件,这在我的交叉验证循环中:
for i = 1:NUMBER_OF_FOLDS
funcdata = data{i};
lossFunction = @(coef)squaredLoss(coef, funcdata);
[theta(i), ~] = fminunc(lossFunction, theta0);
endfor
祝你好运徘徊的灵魂!