Issue
I wrote a code in eclipse to do something as follows.
- run svm_train while using an input from output.txt whose data format is libSVM.
- use cross validation while adding "-v 3" in parameter.
- show an output from libSVM on console.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class libSVM {
public static void main(String[] args) {
try {
ProcessBuilder pb = new ProcessBuilder(
"C:\\libsvm-3.24\\windows\\svm-train.exe","-v 3",
"option10output.txt");
pb. redirectErrorStream(true);
Process p = pb.start();
p.waitFor();
System.out.println(pb.redirectInput());
System.out.println(p.exitValue());
try (var reader = new BufferedReader(
new InputStreamReader(p.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
Also, I added libsvm.jar on buildpath. But, my console seems as follows.
PIPE
1
n-fold cross validation: n must >= 2
Usage: svm-train [options] training_set_file [model_file]
options:
-s svm_type : set type of SVM (default 0)
0 -- C-SVC (multi-class classification)
1 -- nu-SVC (multi-class classification)
2 -- one-class SVM
3 -- epsilon-SVR (regression)
4 -- nu-SVR (regression)
-t kernel_type : set type of kernel function (default 2)
0 -- linear: u'*v
1 -- polynomial: (gamma*u'*v + coef0)^degree
2 -- radial basis function: exp(-gamma*|u-v|^2)
3 -- sigmoid: tanh(gamma*u'*v + coef0)
4 -- precomputed kernel (kernel values in training_set_file)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
-v n: n-fold cross validation mode
-q : quiet mode (no outputs)
My code seems to be wrong because exit code is 1. How can I fix this to do 3 things listed above?
Solution
new ProcessBuilder(
"C:\\libsvm-3.24\\windows\\svm-train.exe","-v 3",
"option10output.txt")
is for the command line call ("-v 3"
as a single argument):
"C:\libsvm-3.24\windows\svm-train.exe" "-v 3" option10output.txt
But I guess you want to have
"C:\libsvm-3.24\windows\svm-train.exe" -v 3 option10output.txt
So use the following (-v
and 3
as separate arguments) instead:
new ProcessBuilder(
"C:\\libsvm-3.24\\windows\\svm-train.exe", "-v", "3",
"option10output.txt")
Answered By - howlger