1 #ifndef CROSSVALIDATE_H
2 #define CROSSVALIDATE_H
29 Derived<CosanModel> Model,
30 Derived<CosanMetric<NumericType>> Metric,
31 Derived<Splitter> Split>
39 std::vector<NumericType> errors;
40 errors.resize(split.GetKFoldNumber());
41 std::vector< std::tuple<std::vector<gsl::index>,std::vector<gsl::index> > > split_idx = split.GetSplit();
43 for (gsl::index i =0;i<split.GetKFoldNumber();i++){
44 auto & each = split_idx[i];
47 estimator.fit(X_train, Y_train);
48 errors[i] = metric.GetError(estimator.predict(X_test ),Y_test);
50 return std::accumulate(errors.begin(), errors.end(), 0)/errors.size();
59 Derived<CosanModel> Model,
60 Derived<CosanMetric<NumericType>> Metric,
61 Derived<Splitter> Split>
65 Split & split,
int nthreads = -1){
69 std::vector<NumericType> errors;
70 errors.resize(split.GetKFoldNumber());
71 std::vector< std::tuple<std::vector<gsl::index>,std::vector<gsl::index> > > split_idx = split.GetSplit();
73 omp_set_num_threads(omp_get_max_threads());
76 omp_set_num_threads(nthreads);
78 #pragma omp parallel for
79 for (gsl::index i =0;i<split.GetKFoldNumber();i++){
80 auto & each = split_idx[i];
83 estimator.fit(X_train, Y_train);
84 errors[i] = metric.GetError(estimator.predict(X_test ),Y_test);
86 return std::accumulate(errors.begin(), errors.end(), 0)/errors.size();