load fisheriris;
y = species; %label
X = meas;
%Create a random partition for a stratified 10-fold cross-validation.
c = cvpartition(y,'KFold',10);
% split training/testing sets
[trainIdx testIdx] = crossvalind('HoldOut', y, 0.6);crossvalind用于执行交叉验证,通过返回索引,将整个特性集X随机分成训练和测试数据。利用这些指标,我们可以分别生成X(trainIdx,:)和X(testIdx,:)的训练数据和测试数据。cvpartition也使用分层和非分层的方法来分割数据,但是它不返回指数。我还没有看到crossvalind是一种分层或非分层技术的例子。
问:crossvalind和cvpartition可以一起使用吗?
我想做分层交叉验证。但我不知道如何将数据集划分为训练和测试,并得到指标。
发布于 2018-06-08 13:16:48
交叉验证和训练/测试分区是评估模型性能的两种不同的方法,而不是构建模型本身的不同方法。通常,您应该使用您拥有的所有数据构建一个模型,但也应该使用这些技术之一(使用该数据的子集构建和评分一个或多个附加模型)来估计主模型可能会有多好。
交叉验证平均多个训练/测试分裂的结果,所以通常会给出一个更现实的,即更悲观的估计模型的性能。
在您提到的两个功能中,crossvalind似乎是特定于生物信息学工具箱的,并且相当古老。帮助 for cvpartition给出了一个如何进行分层交叉验证的示例:
示例 对虹膜数据进行10倍分层交叉验证,计算分类误差。 负载(‘fisheriris’);CVO =cv分区(物种,'k',10);err =零(CVO.NumTestSets,1);for i= 1:CVO.NumTestSets trIdx = CVO.training(i);teIdx = CVO.test(i);ytest =分类(meas(teIdx,:),meas(trIdx,:),.物种(trIdx,:),err(i) =sum(~strcmp,物种(TeIdx)),cvErr = sum(err)/sum(CVO.TestSize);
https://stackoverflow.com/questions/50730354
复制相似问题