如何在 matlab 中使用 `crossval` 进行留一法验证
How to use `crossval` in matlab for a Leave one Out Validation method
我一直在阅读文档:here and here 但我真的不清楚,我不知道如何实际使用 crossval
进行留一交叉验证。
vals = crossval(fun,X)
vals = crossval(fun,X,Y,...)
mse = crossval('mse',X,y,'Predfun',predfun)
mcr = crossval('mcr',X,y,'Predfun',predfun)
val = crossval(criterion,X1,X2,...,y,'Predfun',predfun)
vals = crossval(...,'name',value)
我真的不明白 fun
部分。
我用不同的指数估计了叶绿素率。然后我在这些指数和田地叶绿素率之间做了线性回归。现在我想验证它们,我的一个估计是一个有 22 个条目的列,所以我想使用其中的 21 个作为受训者和 1 个作为测试,并进行 22 次循环,以便所有数据都被用作测试。
但是我不知道我应该把回归模型放在哪里?如果我的回归是 Y=aX+b,
我是重新使用之前为火车部分计算的 a 和 b,还是对火车部分进行新的线性回归,然后看看测试结果是什么?
我不确定我是否完全理解如何制作留一模型。
然后我想通过计算 RMSE(也许还有 R²)来了解测试结果。
如何使用 crossval
进行编码?
我看到了问题 的答案,但我无法使用我的许可证访问 crossvalind
功能。
好吧,我终于弄明白了:所以这是我的脚本:
首先我对我的数据和线性回归函数进行了充电
X=indicesCha_without_Cloud(:,3);
y=Cha_g_m2t_without_Cloud(:,3);
testval=@(XTRAIN,ytrain,XTEST)Linear_regression_indices( XTRAIN,ytrain,XTEST);
在我的例子中 fun
(在 Mathwork help 中)是 testval
而 Linear_regression_indices
是一个非常简单的函数:
function [ Linear_regression_indices ] = Linear_regression_indices(XTRAIN,ytrain,XTEST )
Linear_regression_indices=(polyval(polyfit(XTRAIN,ytrain,1),XTEST));
end
有两种方法可以做到,它们都给出相同的结果:
只需使用 crossval
函数
cvMse = crossval('mse',X,y,'predfun',testval,'leaveout',1);
这将根据数据大小进行多次折叠,每次使用其中一个数据作为 Xtest
第二个正在使用cvpartition
c = cvpartition(n,'LeaveOut')
创建一个随机分区,用于对 n 个观察进行留一法交叉验证。留一法是 'KFold' 的特例,其中折叠数等于观察数。 link
c = cvpartition(y,'LeaveOut');
cvMse2=crossval('mse',X,y,'predfun',testval,'partition',c);
那么RMSE就很容易计算出来了
RMSE=sqrt(cvMse);
RMSE2=sqrt(cvMse2);
然后我就得到了我的答案,在我的例子中RMSE=0,3548
我一直在阅读文档:here and here 但我真的不清楚,我不知道如何实际使用 crossval
进行留一交叉验证。
vals = crossval(fun,X)
vals = crossval(fun,X,Y,...)
mse = crossval('mse',X,y,'Predfun',predfun)
mcr = crossval('mcr',X,y,'Predfun',predfun)
val = crossval(criterion,X1,X2,...,y,'Predfun',predfun)
vals = crossval(...,'name',value)
我真的不明白 fun
部分。
我用不同的指数估计了叶绿素率。然后我在这些指数和田地叶绿素率之间做了线性回归。现在我想验证它们,我的一个估计是一个有 22 个条目的列,所以我想使用其中的 21 个作为受训者和 1 个作为测试,并进行 22 次循环,以便所有数据都被用作测试。 但是我不知道我应该把回归模型放在哪里?如果我的回归是 Y=aX+b, 我是重新使用之前为火车部分计算的 a 和 b,还是对火车部分进行新的线性回归,然后看看测试结果是什么? 我不确定我是否完全理解如何制作留一模型。
然后我想通过计算 RMSE(也许还有 R²)来了解测试结果。
如何使用 crossval
进行编码?
我看到了问题 crossvalind
功能。
好吧,我终于弄明白了:所以这是我的脚本:
首先我对我的数据和线性回归函数进行了充电
X=indicesCha_without_Cloud(:,3);
y=Cha_g_m2t_without_Cloud(:,3);
testval=@(XTRAIN,ytrain,XTEST)Linear_regression_indices( XTRAIN,ytrain,XTEST);
在我的例子中 fun
(在 Mathwork help 中)是 testval
而 Linear_regression_indices
是一个非常简单的函数:
function [ Linear_regression_indices ] = Linear_regression_indices(XTRAIN,ytrain,XTEST )
Linear_regression_indices=(polyval(polyfit(XTRAIN,ytrain,1),XTEST));
end
有两种方法可以做到,它们都给出相同的结果:
只需使用
crossval
函数cvMse = crossval('mse',X,y,'predfun',testval,'leaveout',1);
这将根据数据大小进行多次折叠,每次使用其中一个数据作为 Xtest
第二个正在使用
cvpartition
c = cvpartition(n,'LeaveOut')
创建一个随机分区,用于对 n 个观察进行留一法交叉验证。留一法是 'KFold' 的特例,其中折叠数等于观察数。 linkc = cvpartition(y,'LeaveOut');
cvMse2=crossval('mse',X,y,'predfun',testval,'partition',c);
那么RMSE就很容易计算出来了
RMSE=sqrt(cvMse);
RMSE2=sqrt(cvMse2);
然后我就得到了我的答案,在我的例子中RMSE=0,3548