[英]CrossValidation in Accord.NET
假设我们以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();
现在如何从这些方面中提取最佳模型,或者如果没有前面提到的框架将以什么逻辑运行?
我开始以其他方式考虑这个问题,也许是由于缺少适当的文档(与encog等不同),由于缺少适当的文档,这可能是一个很好的答案。也许我们应该自己选择模型,然后使用每个选择的模型对它运行CrossValidation,然后可以使用Mean选择合适的模型。
可以对结果执行以下操作:
var minError = result.Models.Select(y=>y.ValidationValue).Min();
var bestModel = result.Models.Where(x=>x.ValidationValue==minError).FirstOrDefault()
首先找出最小的误差是多少,然后选择产生该误差的模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.