Octave重复函数最小化

时间:2015-03-23 15:09:31

标签: matlab octave

所以我正在尝试对数据集执行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,就好像它是一个局部变量。任何帮助将不胜感激!

1 个答案:

答案 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
祝你好运徘徊的灵魂!