0

I am trying to implement SVM classifier in Java using libsvm. I am getting the following error:

Exception in thread "main" java.lang.NullPointerException
at libsvm.Kernel.dot(svm.java:213)
at libsvm.Kernel.kernel_function(svm.java:172)
at libsvm.SVC_Q.<init>(svm.java:1161)
at libsvm.svm.solve_c_svc(svm.java:1333)
at libsvm.svm.svm_train_one(svm.java:1510)
at libsvm.svm.svm_train(svm.java:2067)

I am trying to implement a binary classifier on 6 training examples: this is my code:

import libsvm.*;

import java.io.*;
import java.io.Reader;
import java.lang.Object;


public class SVMclassifier {
    public SVMclassifier(){ 
        svm_problem svmData=new svm_problem();
        svmData.l=6;
        double[] lab={1,0,1,1,0,0};
        svmData.y=lab;

        svm_node[][] values=new svm_node[6][3];

        System.out.print("I am here");
        svm_node AA=new svm_node();
        AA.index=1;
        AA.value=0.1;
        values[0][1]=AA;
        AA.index=1;
        AA.value=0.9;
        values[0][2]=AA;
        AA.index=1;
        AA.value=0.9;
        values[1][0]=AA;
        AA.index=2;
        AA.value=0.1;
        values[1][1]=AA;
        AA.index=1;
        AA.value=0.05;
        values[2][0]=AA;
        AA.index=2;
        AA.value=0.95;
        values[2][1]=AA;
        AA.index=1;
        AA.value=0.06;
        values[3][0]=AA;
        AA.index=2;
        AA.value=0.90;
        values[3][1]=AA;
        AA.index=1;
        AA.value=0.95;
        values[4][0]=AA;
        AA.index=2;
        AA.value=0.05;
        values[4][1]=AA;
        AA.index=1;
        AA.value=0.90;
        values[5][0]=AA;
        AA.index=2;
        AA.value=0.06;
        values[5][1]=AA;

        svmData.x=values;

        svm_model paras=new svm_model();

        svm_parameter params =new svm_parameter();
        int[] bb={1,1,1};
        double[] cc={1,1,1};
        System.out.println("I am here");
        params.svm_type = svm_parameter.C_SVC;
        params.kernel_type = svm_parameter.LINEAR;
        params.degree = 3;
        params.gamma = 0.5;   // 1/num_features
        params.coef0 = 0;
        params.nu = 0.5;
        params.cache_size = 100;
        params.C = 1;
        params.eps = 1e-3;
        params.p = 0.1;
        params.shrinking = 1;
        params.probability = 0;
        params.nr_weight = 0;
        params.weight_label=bb;
        params.weight=cc;
        paras=svm.svm_train(svmData, params) ;


        for(int i=0;i<=5;i=i+1){
            svm_node[] v=values[i];
            double u=svm.svm_predict(paras, v);
            System.out.println(u);      
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SVMclassifier A=new SVMclassifier();
    }
}

I am new to java as well as libsvm. any help would be welcome. Thanks

Meik Vtune
  • 450
  • 8
  • 25

1 Answers1

0

Please read more about debugging. Setting breakpoint @ line 213 in svm.java and starting a program in debug mode would tell you that the code tries to access the x[0].index.

Somehow your code generates the array of svm_nodes without the 0 index set:

enter image description here

Piotr Reszke
  • 1,576
  • 9
  • 21