【发布时间】:2016-03-23 23:42:53
【问题描述】:
假设我们使用 10 折启动交叉验证来训练支持向量机,根据理论,每个折都将使用不同的模型,并且基于最小的交叉验证错误,我们将选择该模型,现在根据 Accord.NET这是我们用来实现交叉验证的框架:
var crossvalidation = new CrossValidation(size: data.Length, folds: 3);
crossvalidation.Fitting = delegate(int k, int[] indicesTrain, int[] indicesValidation)
{
// Lets now grab the training data:
var trainingInputs = data.Submatrix(indicesTrain);
var trainingOutputs = xor.Submatrix(indicesTrain);
// And now the validation data:
var validationInputs = data.Submatrix(indicesValidation);
var validationOutputs = xor.Submatrix(indicesValidation);
// Create a Kernel Support Vector Machine to operate on the set
var svm = new KernelSupportVectorMachine(new Polynomial(2), 2);
// Create a training algorithm and learn the training data
var smo = new SequentialMinimalOptimization(svm, trainingInputs, trainingOutputs);
double trainingError = smo.Run();
// Now we can compute the validation error on the validation data:
double validationError = smo.ComputeError(validationInputs, validationOutputs);
// Return a new information structure containing the model and the errors achieved.
return new CrossValidationValues(svm, trainingError, validationError);
};
然后我们计算:
// Compute the cross-validation
var result = crossvalidation.Compute();
现在如何从这些折叠中提取最佳模型,或者如果不是前面提到的,框架的工作逻辑是什么?
【问题讨论】:
-
我认为这里有点混乱。交叉验证可用于确定与模型一起使用的最佳超参数,但绝不应挑选交叉验证中误差最小的模型成为您的“最佳”模型。
-
换句话说,使用交叉验证的正确方法是使用它来识别最佳超参数,然后您应该使用所有可用数据创建一个新模型使用这些超参数并将这个模型作为你迄今为止的“最佳”模型。
-
我知道这个问题被问到已经好几年了......但是你会从交叉验证中提取哪些超参数来训练 SVM?
标签: c# accord.net