什么是正确使用libSVM库函数的示例?

时间:2014-07-01 14:45:37

标签: machine-learning nlp svm libsvm

我需要在java中看到一些示例代码,以便我可以找出库中定义的各种方法的正常运行。还有如何传递各种必要的参数。 他们之中有一些是 svm_predict svm_node svm_problem等 我做了很多谷歌搜索,我仍然没有找到实质性的东西。而java的文档是另一个主要的失望。请帮帮我!! 这是我到目前为止编写的一些代码。

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import libsvm.*;
import libsvm.svm_node;
import java.io.IOException;
import java.io.InputStream;
public class trial {
public static void main(String[] args) throws IOException {
   svm temp = new svm();
   svm_model model;
   model = svm.svm_load_model("C:\\Users\\sidharth\\Desktop\\libsvm-3.18\\windows\\svm-        m.model");
   svm_problem prob = new svm_problem();
   prob.l = trial.countLines("C:\\Users\\sidharth\\Desktop\\libsvm-3.18\\windows\\svm-ml.test");
   prob.y = new double[prob.l];
   int i;
   for(i=0;i<prob.l;i++)
   {
       prob.y[i]=0.0;
   }

   prob.x = new svm_node[prob.l][];


   temp.svm_predict(model, /*what to put here*/);







}
public static int countLines(String filename) throws IOException {
InputStream is = new BufferedInputStream(new FileInputStream(filename));
try {
    byte[] c = new byte[1024];
    int count = 0;
    int readChars = 0;
    boolean empty = true;
    while ((readChars = is.read(c)) != -1) {
        empty = false;
        for (int i = 0; i < readChars; ++i) {
            if (c[i] == '\n') {
                ++count;
            }
        }
    }
    return (count == 0 && !empty) ? 1 : count;
} finally {
    is.close();
}
}

}

我已经创建了一个模型文件,我想使用此模型文件预测样本数据。我给了prob.y []一个0的标签。 任何由您编写的示例代码都将提供很大帮助。 附:我应该制作一个基于SVM的POS标记器。这就是为什么我标记了nlp。

1 个答案:

答案 0 :(得分:0)

非常简单。

对于培训,你可以写一些表格:

svm_train training = new svm_train(); 

String[] options = new String[7];
options [0] = "-c";
options [1] = "1";
options [2] = "-t";
options [3] = "0";     //linear kernel          
options [4] = "-v";
options [5] = "10";    //10 fold cross-validation
options [6] = your_training_filename;   

training.run(options);

如果您选择保存模型。然后你可以通过

检索它
libsvm.svm_model model = training.getModel();

如果您希望在测试数据上测试模型,可以写一些表格:

BufferedReader input = new BufferedReader(new FileReader(test_file));           
DataOutputStream output = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(prediction_output_file)));     
svm_predict.predict(input, output, model, 0);    

希望这有帮助!