我一直在阅读文档:here和here但对我来说真的不清楚,我不知道如何使用p 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
进行编码?
我看到了here问题的答案,但我无法使用我的许可证访问crossvalind
这个功能。
答案 0 :(得分:1)
我最终弄清楚了:所以这是我的剧本:
首先我收取了我的数据和线性回归函数
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