Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调试新的crossval函数:MATLAB_Matlab_Debugging_Cross Validation - Fatal编程技术网

调试新的crossval函数:MATLAB

调试新的crossval函数:MATLAB,matlab,debugging,cross-validation,Matlab,Debugging,Cross Validation,我一直在自己编写一个crossval()函数,因为MATLAB上的crossval()不允许我尝试不同的(自定义)损失/错误度量。然而,我得到的损失估计似乎很小,我无法找出哪里出了问题 我使用的代码如下: function Loss_est = CV(fun1,fun2,data,k) K = crossvalindex(data,k); Loss = zeros(size(K,2),1); for j1 = 1:size(K,2) Xtest = K{j1}; Xtest =

我一直在自己编写一个crossval()函数,因为
MATLAB
上的
crossval()
不允许我尝试不同的(自定义)损失/错误度量。然而,我得到的损失估计似乎很小,我无法找出哪里出了问题

我使用的代码如下:

function Loss_est = CV(fun1,fun2,data,k)
K = crossvalindex(data,k);
Loss = zeros(size(K,2),1);
for j1 = 1:size(K,2)
    Xtest = K{j1};
    Xtest = [ones(size(Xtest,1),1) Xtest(:,1:end-1)];
    ytest = Xtest(:,end);
    K1 = K;
    K1{j1}=[];
    Xtrain = cell2mat(K1(1,:)');
    Xtrain = [ones(size(Xtrain,1),1) Xtrain(:,1:end-1) ]; 
    ytrain = Xtrain(:,end);
    ynew = Xtest*fun1(ytrain,Xtrain);
    Loss(j1,1) = fun2(ynew,ytest);
end
Loss(isnan(Loss))=[];
Loss_est = mean(Loss);
在这里,corssvalindex函数获取数据,并在随机化数据行后将数据划分为单元格

%% Temp_crossvalidation indexing
function [K,edges] = crossvalindex(data,k)
r = size(data,1);
id = randperm(r);
data_1 = data(id,:);

% Edges
edges = 1:round(r/k):r+1;
if numel(edges) < k+1
    edges = [edges r+1];
end

% Index-ed and partition
[~,idx] = histc(id,edges);
K = cell(1,numel(edges-1));
for i = 1:numel(edges-1)
    K{i} = data_1(idx == i,:);
end

end

我认为您还需要发布
crossvalindex
的代码。还有一个旁注,
fun1
fun2
是糟糕的输入参数名称!为什么不
fun\u train
fun\u model
fun\u err
或其他什么?在删除
NaN
值之前,您也调试并检查了
Loss
矩阵的值吗?嘿,丹。查看
crossvalindex
的代码。哈哈,我会考虑重新命名整件事。
data = randi(1000,100,10);
fun1 = @(x,y) regress(x,y);
fun2 = @(x,y) sum(abs(y-x));

k = 10;
Loss_est = CV(fun1,fun2,data,k);
Loss_est =

   5.4346e-26