我正在使用 Matlab 使用交叉验证 (CV) 方法训练前馈 NN。我对CV方法的理解如下。(错的地方请指正)
让作为标签集
X的整个数据集。Y拆分X为 90/10 的比例得到:[Xtrain,Xtest]通过调用cvpartition(Y,'Holdout',0.1,'Stratify',true)将 CV 应用于
Xtrain:对于每一折,我都计算了准确度。在 CV 循环结束时,我有一个平均准确度得分。让我们accCV表示这个变量。CV 循环内部xtrain进一步拆分为[xtrain_cv,xtrain_val].在 CV 循环之后,我重新初始化权重并使用
Xtrain. 然后我得到一个训练准确度,我用变量 表示accTrain。使用在步骤 3 中获得的模型,我测试评估模型的目的,并将其视为泛化性能,即当我们有一个看不见的未来数据时的性能,
Xtest。我称这种准确性为accTest。
问题 1:在不使用 CV 方法时,accCV是否会低于训练集的准确度?Xtrain那就是我只调用一次NN模型Xtrain并记录准确度并用变量表示accTrain,那么有可能accCV ~ accTrain吗?或者直观地说,accCV在不使用 CV 方法时应该接近准确度,因为数据集是相同的,即Xtrain. 如果是这种情况,那么为什么在 CV 之外使用 CV,我们不重用在 CV 内部创建的模型?它告诉我们什么?
问题2 :如果不使用 CVaccCV < accTest对整个数据集的准确率Xtrain接近accTest( accTrain ~ accTest) 我们做错了什么?最好的情况是什么?是accCV ~ accTest吗?