private static Callable<svm_model> getTrainingFunction(svm_problem problem, svm_parameter param) { return () -> svm.svm_train(problem, param); }
@Override public Integer classify(FeatureVector features) { requireNonNull(model, "model is null"); return (int) svm.svm_predict(model, toSvmNodes(features)); }
@Override public byte[] getSerializedData() { File file = null; try { // libsvm doesn't have a method to serialize the model into a buffer, so write it out to a file and then read it back in file = File.createTempFile("svm", null); svm.svm_save_model(file.getAbsolutePath(), model); return Files.readAllBytes(file.toPath()); } catch (IOException e) { throw new UncheckedIOException(e); } finally { if (file != null) { //noinspection ResultOfMethodCallIgnored file.delete(); } } }
svm_problem prob = new svm_problem(); prob.l = n; prob.y = new double[n]; svm_node node=new svm_node(); node.index=(featureId+1); //the indexes in the library start from 1!!! node.value=value; svm_node node=new svm_node(); node.index=(featureId+1); node.value=0.0; svm.svm_set_print_string_function((String s) -> { if(s != null) { logger.debug(s.trim()); svm_model model = svm.svm_train(prob, params);
svm_node node = new svm_node(); svm_node node=new svm_node(); node.index=(featureId+1); node.value=0.0; svm.svm_get_labels(model,labels); svm.svm_predict_probability(model, xSVM, prob_estimates);
protected static svm_node[] toSvmNodes(FeatureVector features) { svm_node[] nodes = new svm_node[features.size()]; int i = 0; // Features map is sorted, so we can just flatten it to a list for libsvm for (SortedMap.Entry<Integer, Double> feature : features.getFeatures().entrySet()) { nodes[i] = new svm_node(); nodes[i].index = feature.getKey(); nodes[i].value = feature.getValue(); i++; } return nodes; } }
public static SvmRegressor deserialize(byte[] modelData) { // TODO do something with the hyperparameters try { svm_model model = svm.svm_load_model(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(modelData)))); return new SvmRegressor(model); } catch (IOException e) { throw new UncheckedIOException(e); } }
private static svm_problem toSvmProblem(Dataset dataset) { svm_problem problem = new svm_problem(); List<Double> labels = dataset.getLabels(); problem.l = labels.size(); problem.y = new double[labels.size()]; for (int i = 0; i < labels.size(); i++) { problem.y[i] = labels.get(i); } problem.x = new svm_node[labels.size()][]; for (int i = 0; i < dataset.getDatapoints().size(); i++) { problem.x[i] = toSvmNodes(dataset.getDatapoints().get(i)); } return problem; }
public static svm_parameter parseParameters(String paramString) svm_parameter params = new svm_parameter(); params.kernel_type = svm_parameter.LINEAR; params.degree = 3;
ONE_CLASS_Q(svm_problem prob, svm_parameter param) { super(prob.l, prob.x, param); cache = new Cache(prob.l,(long)(param.cache_size*(1<<20))); QD = new double[prob.l]; for(int i=0;i<prob.l;i++) QD[i] = kernel_function(i,i); }
void swap_index(int i, int j) { cache.swap_index(i,j); super.swap_index(i,j); do {double _=QD[i]; QD[i]=QD[j]; QD[j]=_;} while(false); } }
float[] get_Q(int i, int len) { float[][] data = new float[1][]; int start, j; if((start = cache.get_data(i,data,len)) < len) { for(j=start;j<len;j++) data[0][j] = (float)(y[i]*y[j]*kernel_function(i,j)); } return data[0]; }
float[] get_Q(int i, int len) { float[][] data = new float[1][]; int start, j; if((start = cache.get_data(i,data,len)) < len) { for(j=start;j<len;j++) data[0][j] = (float)kernel_function(i,j); } return data[0]; }
public double evaluate(double[] features, svm_model model) { svm_node[] nodes = new svm_node[features.length-1]; for (int i = 1; i < features.length; i++) { svm_node node = new svm_node(); node.index = i; node.value = features[i]; nodes[i-1] = node; } int totalClasses = 2; int[] labels = new int[totalClasses]; svm.svm_get_labels(model,labels); double[] prob_estimates = new double[totalClasses]; double v = svm.svm_predict_probability(model, nodes, prob_estimates); for (int i = 0; i < totalClasses; i++){ System.out.print("(" + labels[i] + ":" + prob_estimates[i] + ")"); } System.out.println("(Actual:" + features[0] + " Prediction:" + v + ")"); return v; }
public static SvmClassifier deserialize(byte[] modelData) { // TODO do something with the hyperparameters try { svm_model model = svm.svm_load_model(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(modelData)))); return new SvmClassifier(model); } catch (IOException e) { throw new UncheckedIOException(e); } }
@Override public double regress(FeatureVector features) { requireNonNull(model, "model is null"); return svm.svm_predict(model, toSvmNodes(features)); }
ONE_CLASS_Q(svm_problem prob, svm_parameter param) { super(prob.l, prob.x, param); cache = new Cache(prob.l,(long)(param.cache_size*(1<<20))); QD = new double[prob.l]; for(int i=0;i<prob.l;i++) QD[i] = kernel_function(i,i); }
void swap_index(int i, int j) { cache.swap_index(i,j); super.swap_index(i,j); do {byte _=y[i]; y[i]=y[j]; y[j]=_;} while(false); do {double _=QD[i]; QD[i]=QD[j]; QD[j]=_;} while(false); } }
ONE_CLASS_Q(svm_problem prob, svm_parameter param) { super(prob.l, prob.x, param); cache = new Cache(prob.l,(long)(param.cache_size*(1<<20))); QD = new float[prob.l]; for(int i=0;i<prob.l;i++) QD[i]= (float)kernel_function(i,i); }
@Override void swap_index(int i, int j) { cache.swap_index(i,j); super.swap_index(i,j); do {float _=QD[i]; QD[i]=QD[j]; QD[j]=_;} while(false); } }