private static SoftClassifier<double[]> trainModel(String learner, double[][] x, int[] y) { if (learner.equals("SVM")) { SVM<double[]> svm = new SVM<>(new LinearKernel(), 0.01); svm.learn(x, y); svm.finish(); svm.trainPlattScaling(x, y); return svm; } else if (learner.equals("RandomForest")) { RandomForest randomForest = new RandomForest(x, y, 100); return randomForest; } else { throw new IllegalArgumentException("Unknow learning algorithm: " + learner); } }
/** * Learns a SVM classifier with given training data. * @param x training instances. * @param y training labels in [0, k), where k is the number of classes. * @param weight instance weight. Must be positive. The soft margin penalty * for instance i will be weight[i] * C. * @return trained SVM classifier */ public SVM<T> train(T[] x, int[] y, double[] weight) { SVM<T> svm = null; if (k == 2) { svm = new SVM<>(kernel, Cp, Cn); } else { if (this.weight == null) { svm = new SVM<>(kernel, Cp, k, strategy); } else { svm = new SVM<>(kernel, Cp, this.weight, strategy); } } svm.setTolerance(tol); for (int i = 1; i <= epochs; i++) { svm.learn(x, y, weight); } svm.finish(); return svm; } }
private SoftClassifier<double[]> trainClassifier(AttributeDataset data, int numberOfClasses) { final double c = 1.0; SVM<double[]> classifier; if(numberOfClasses > 2) { classifier = new SVM<double[]>(new LinearKernel(), c, numberOfClasses, Multiclass.ONE_VS_ALL); } else { classifier = new SVM<double[]>(new LinearKernel(), c); } int[] y = data.labels(); double[][] x = data.x(); classifier.learn(x, y); classifier.finish(); classifier.trainPlattScaling(x, y); return classifier; }