让我们处理CROSSVAL 文档中的示例 2。
load('fisheriris');
y = species;
X = meas;
在这里,我们从示例 mat 文件加载数据并将变量分配给 X 和 y。 meas amtrix 包含鸢尾花的不同测量值,species 是鸢尾花的树类,我们试图用数据预测。
交叉验证用于在同一数据集上多次训练分类器。基本上在每次迭代中,您将数据集拆分为训练和测试数据。比例由k倍决定。例如,如果k 为 10,则 90% 的数据将用于训练,其余 10% - 用于测试,您将进行 10 次迭代。这是由CVPARTITION 函数完成的。
cp = cvpartition(y,'k',10); % Stratified cross-validation
如果您输入cp. 并按Tab,您可以探索cp 对象。您将看到不同的属性和方法。例如,find(cp.test(1)) 将显示第一次迭代的测试集的索引。
下一步是准备预测函数。这可能是您遇到主要问题的地方。该语句使用匿名函数创建函数句柄。 @(XTRAIN, ytrain,XTEST) 部分声明此函数有 3 个输入参数。下一部分(classify(XTEST,XTRAIN,ytrain)) 定义了函数,它使用已知的ytrain 类获取训练数据XTRAIN,并使用生成的模型预测XTEST 数据的类。 (这些数据来自cp,记得吗?)
classf = @(XTRAIN, ytrain,XTEST)(classify(XTEST,XTRAIN,ytrain));
然后我们运行 CROSSVAL 函数来估计通过完整数据集、预测函数句柄和分区对象 cp 的错误分类率 (mcr)。
cvMCR = crossval('mcr',X,y,'predfun',classf,'partition',cp)
cvMCR =
0.0200
还有问题吗?