交叉验证函数crossvalind

时间:2016-10-02 14:31:44

标签: matlab validation svm libsvm cross-validation

我有疑问;关于交叉验证,对我来说,交叉验证用于找到最佳参数。 但我不明白这个函数的作用" crossvalind":生成交叉验证索引,它只是一个没有模型的数据集,就像这个例子:

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

1 个答案:

答案 0 :(得分:0)

crossvalind()函数将您的数据分为两组:训练集和交叉验证集。 通过你的例子: [trainIdx testIdx] = crossvalind('HoldOut',size(species,1),1/3);意味着分割物种中的数据(训练集中的2/3和交叉验证集中的1/3)。 假设您的数据如下:

species = [datarow1; datarow2; datarow3; datarow4; datarow5; datarow6]然后 trainIdx就像[1; 1; 0; 1; 1; 0],testIdx就像[0; 0; 1; 0; 0; 1]意味着从我们的set crossvalind函数中的6个总元素赋值4到火车组和2到交叉验证组。当然这是一个随机赋值,意味着每次调用函数时零和一个索引都会变化,但它们之间的比例将固定,而trainIdx + testIdx将始终为1(size(species,1),1)

crossvalind('LeaveMout',size(species,1),2)与此特定情况下的crossvalind('HoldOut',size(species,1),1/3)完全相同。在'HoldOut'格式中,您提供的参数P取0到1之间的值(如上例中的1/3),而选项'LeaveMout'则提供整数M,如6个总样本中的2个样本或类似2000个样本的样本数据集中的10000个总样本。在'重新取代'的情况下:crossvalind('重新取代',大小(种类,1),[1 / 3,2 / 3])将是相同的但在这里你也可以选择让我们说[1/3, 3/4]意味着一些样本可以在列车和交叉验证集上,甚至[1,1],这意味着所有样本都在两个集合中使用(trainIdx = testIdx = [1; 1; 1;上例中的1; 1; 1]。我强烈建议输入help crossvalind并查看帮助文件,该文件总是比我以前更加详细和有用。

相关问题