def evaluate4svm(labels, feats, params={'c': 1, 'kernal': 'gauss'}, Nsplit=2): """ Run Cross-validation to evaluate the SVM. Parameters ---------- labels: 2d array Data set labels. feats: array Data set feats. params: dictionary Search scope parameters. Nsplit: int, default = 2 The n for n-fold cross validation. """ c = params.get('c') if params.get('kernal' == 'gauss'): kernal = GaussianKernel() kernal.set_width(80) elif params.get('kernal' == 'sigmoid'): kernal = SigmoidKernel() else: kernal = LinearKernel() split = CrossValidationSplitting(labels, Nsplit) split.build_subsets() accuracy = np.zeros(Nsplit) time_test = np.zeros(accuracy.shape) for i in range(Nsplit): idx_train = split.generate_subset_inverse(i) idx_test = split.generate_subset_indices(i) feats.add_subset(idx_train) labels.add_subset(idx_train) print c, kernal, labels svm = GMNPSVM(c, kernal, labels) _ = svm.train(feats) out = svm.apply(feats_test) evaluator = MulticlassAccuracy() accuracy[i] = evaluator.evaluate(out, labels_test) feats.remove_subset() labels.remove_subset() feats.add_subset(idx_test) labels.add_subset(idx_test) t_start = time.clock() time_test[i] = (time.clock() - t_start) / labels.get_num_labels() feats.remove_subset() labels.remove_subset() return accuracy