繁体   English   中英

Accord.NET中的交叉验证

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM