Note that there are some explanatory texts on larger screens.

plurals
  1. POlibsvm java implementation
    primarykey
    data
    text
    <p>I am trying to use the java bindings for libsvm:</p> <pre><code>http://www.csie.ntu.edu.tw/~cjlin/libsvm/ </code></pre> <p>I have implemented a 'trivial' example which is easily linearly separable in y. The data is defined as:</p> <pre><code>double[][] train = new double[1000][]; double[][] test = new double[10][]; for (int i = 0; i &lt; train.length; i++){ if (i+1 &gt; (train.length/2)){ // 50% positive double[] vals = {1,0,i+i}; train[i] = vals; } else { double[] vals = {0,0,i-i-i-2}; // 50% negative train[i] = vals; } } </code></pre> <p>Where the first 'feature' is the class and the training set is similarly defined.</p> <p>To train the model:</p> <pre><code>private svm_model svmTrain() { svm_problem prob = new svm_problem(); int dataCount = train.length; prob.y = new double[dataCount]; prob.l = dataCount; prob.x = new svm_node[dataCount][]; for (int i = 0; i &lt; dataCount; i++){ double[] features = train[i]; prob.x[i] = new svm_node[features.length-1]; for (int j = 1; j &lt; features.length; j++){ svm_node node = new svm_node(); node.index = j; node.value = features[j]; prob.x[i][j-1] = node; } prob.y[i] = features[0]; } svm_parameter param = new svm_parameter(); param.probability = 1; param.gamma = 0.5; param.nu = 0.5; param.C = 1; param.svm_type = svm_parameter.C_SVC; param.kernel_type = svm_parameter.LINEAR; param.cache_size = 20000; param.eps = 0.001; svm_model model = svm.svm_train(prob, param); return model; } </code></pre> <p>Then to evaluate the model I use:</p> <pre><code>public int evaluate(double[] features) { svm_node node = new svm_node(); for (int i = 1; i &lt; features.length; i++){ node.index = i; node.value = features[i]; } svm_node[] nodes = new svm_node[1]; nodes[0] = 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 &lt; totalClasses; i++){ System.out.print("(" + labels[i] + ":" + prob_estimates[i] + ")"); } System.out.println("(Actual:" + features[0] + " Prediction:" + v + ")"); return (int)v; } </code></pre> <p>Where the passed array is a point from the testing set.</p> <p>The results are always returning class 0. With the exact results being:</p> <pre><code>(0:0.9882998314585194)(1:0.011700168541480586)(Actual:0.0 Prediction:0.0) (0:0.9883952943701599)(1:0.011604705629839989)(Actual:0.0 Prediction:0.0) (0:0.9884899803606306)(1:0.011510019639369528)(Actual:0.0 Prediction:0.0) (0:0.9885838957058696)(1:0.011416104294130458)(Actual:0.0 Prediction:0.0) (0:0.9886770466322342)(1:0.011322953367765776)(Actual:0.0 Prediction:0.0) (0:0.9870913229268679)(1:0.012908677073132284)(Actual:1.0 Prediction:0.0) (0:0.9868781382588805)(1:0.013121861741119505)(Actual:1.0 Prediction:0.0) (0:0.986661444476744)(1:0.013338555523255982)(Actual:1.0 Prediction:0.0) (0:0.9864411843906802)(1:0.013558815609319848)(Actual:1.0 Prediction:0.0) (0:0.9862172999068877)(1:0.013782700093112332)(Actual:1.0 Prediction:0.0) </code></pre> <p>Can someone explain why this classifier is not working? Is there a step I have messed up, or a step I am missing?</p> <p>Thanks</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload