【发布时间】:2016-01-15 13:52:51
【问题描述】:
我如何对数据集执行 k 折交叉验证,比如 X。
我已经浏览了 matlab 站点,并尝试过对数据集 X 进行此操作。 以下是在集合 X 上进行 10 折交叉验证的代码。
c= cvcrossvalidate(X,'kFold',10);
这会创建一个对象c,但是我如何访问不同的部分并使用它们来测试我的分类器?各种文字都看不懂。
【问题讨论】:
我如何对数据集执行 k 折交叉验证,比如 X。
我已经浏览了 matlab 站点,并尝试过对数据集 X 进行此操作。 以下是在集合 X 上进行 10 折交叉验证的代码。
c= cvcrossvalidate(X,'kFold',10);
这会创建一个对象c,但是我如何访问不同的部分并使用它们来测试我的分类器?各种文字都看不懂。
【问题讨论】:
按照这个:
C = crossvalind('Kfold', X_label, 10);
for i = 1:10
Test = (C == i);
Train = ~Test;
SVMStruct = svmtrain ( X (Train,:), X_label (Train,:));
Result = svmclassify(SVMStruct, X (Test,:));
end
X_label = 你的数据标签。
X = 你的数据集。
【讨论】:
K-fold 是除了获得非常高的性能之外测试数据的最佳方式。它的工作原理如下: (1)- C 将携带一个数据标签和 10 个随机样本(用于测试)。 (2)- 在循环内部,让变量Test 从C 中的随机10 个样本中抽取一个样本。 (3)- Train = ~Test 表示使用所有其他数据(Test 中的样本除外)作为训练数据。因此,Test 中只有一个样本,Train 中的所有其他样本。下一个循环将选择新样本作为Test 和其他样本作为Train >> 并像这样进行。祝你好运