matlab 交叉验证函数CrosValind

piah890a  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(362)

我有一个问题;关于交叉验证,对我来说,交叉验证是用来寻找最佳参数的。但我不理解这个函数“cross valind”的作用:生成交叉验证指数,它只接受没有模型的数据集,如下例所示:

load fisheriris
[g gn] = grp2idx(species);                     
[trainIdx testIdx] = crossvalind('HoldOut', species, 1/3);
dly7yett

dly7yett1#

Crossvalind()函数将数据分成两组:训练集和交叉验证集。以您的例子为例:[TrainIdx testIdx]=Crossvalind(‘Holdout’,Size(物种,1),1/3);意思是按物种划分数据(训练集中2/3,交叉验证集中1/3)。假设您的数据如下所示:
那么,species=[datarow1;datarow2;datarow3;datarow4;datarow5;datarow6]Idx将类似于[1;1;0;1;1;1;0],而TestIdx将类似于[0;0;1;0;0;1],这意味着从我们集合中的6个元素中,CrossValind函数将4个分配给训练集,2分配给交叉验证集。当然,这是一个随机赋值,这意味着每次调用函数时,0和1索引将不同,但它们之间的比例将是固定的,而Train Idx+estIdx将始终为1(Size(物种,1),1)
在这种情况下,Crosvalind(‘LeaveMout’,Size(Species,1),2)将与Crosvalind(‘Holdout’,Size(Species,1),1/3)完全相同。在‘Holdout’格式中,您提供的参数P的取值范围为0到1(如上例中的1/3),而使用选项‘LeaveMout’时,您可以提供整数M,如6个样本中的2个样本,或数据集中10000个样本中的2000个样本。在‘Resubstitution’的情况下:Crossvalind(‘Resubstitution’,Size(物种,1),[1/3,2/3])仍然是相同的,但在这里,您也可以选择[1/3,3/4],这意味着一些样本可以同时出现在训练集和交叉验证集中,甚至[1,1],这意味着所有样本都在这两个集中使用(在上面的例子中,TrainIdx=testIdx=[1;1;1;1;1;1;1;1;1])。我强烈建议输入Help Crosvalind并查看帮助文件,它总是比我能做的更详细、更有帮助。

相关问题