O uso básico do pacote de algoritmos de máquina de vetores de suporte libsvm O que é demonstrado aqui é a máquina de regressão de vetores de suporte.
Copie o código do código da seguinte forma:
importar java.io.BufferedReader;
importar java.io.File;
importar java.io.FileReader;
importar java.util.ArrayList;
importar java.util.List;
importar libsvm.svm;
importar libsvm.svm_model;
importar libsvm.svm_node;
importar libsvm.svm_parameter;
importar libsvm.svm_problem;
classe pública SVM {
public static void main(String[] args) {
// Define o ponto de ajuste de treinamento a{10.0, 10.0} e o ponto b{-10.0, -10.0}, e a etiqueta correspondente é {1.0, -1.0}
List<Double> rótulo = new ArrayList<Double>();
Lista<svm_node[]> nodeSet = new ArrayList<svm_node[]>();
getData(nodeSet, rótulo, "arquivo/train.txt");
int dataRange=nodeSet.get(0).length;
svm_node[][] datas = new svm_node[nodeSet.size()][dataRange];
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < intervalo de dados; j++) {
dados[i][j] = nodeSet.get(i)[j];
}
}
double[] rótulos = new double[label.size()]; // rótulos correspondentes a a,b
for (int i = 0; i < rótulos.comprimento; i++) {
rótulos[i] = rótulo.get(i);
}
//Define o objeto svm_problem
problema svm_problem = novo svm_problem();
problem.l = nodeSet.size(); // Número de vetores
problem.x = datas; //Tabela de vetores do conjunto de treinamento
problem.y = lables; // Matriz de etiquetas correspondente
//Define o objeto svm_parameter
parâmetro svm_parameter = novo svm_parameter();
param.svm_type = svm_parameter.EPSILON_SVR;
param.kernel_type = svm_parameter.LINEAR;
param.cache_size = 100;
param.eps = 0,00001;
par.C = 1,9;
//Treina o modelo de classificação SVM
System.out.println(svm.svm_check_parameter(problema, parâmetro));
// Se não houver problema com os parâmetros, a função svm.svm_check_parameter() retorna nulo, caso contrário retorna uma descrição de erro.
modelo svm_model = svm.svm_train(problema, parâmetro);
// svm.svm_train() treina o modelo de classificação SVM
// Obtém dados de teste
List<Double> testlabel = new ArrayList<Double>();
Lista<svm_node[]> testnodeSet = new ArrayList<svm_node[]>();
getData(testnodeSet, testlabel, "arquivo/test.txt");
svm_node[][] testdatas = new svm_node[testnodeSet.size()][dataRange];
for (int i = 0; i <testdatas.length; i++) {
for (int j = 0; j < intervalo de dados; j++) {
testdatas[i][j] = testnodeSet.get(i)[j];
}
}
double[] testlables = new double[testlabel.size()]; // rótulos correspondentes a a,b
for (int i = 0; i < testlables.length; i++) {
rótulos de teste[i] = rótulo de teste.get(i);
}
// Rótulo para prever dados de teste
erro duplo = 0,0;
for (int i = 0; i <testdatas.length; i++) {
double truevalue = testáveis[i];
System.out.print(truevalue + " ");
double preverValue = svm.svm_predict(modelo, testdatas[i]);
System.out.println(predictValue);
err += Math.abs(predictValue - truevalue);
}
System.out.println("err=" + err/datas.length);
}
public static void getData(List<svm_node[]> nodeSet, List<Double> label,
String nome do arquivo) {
tentar {
FileReader fr = new FileReader(novo arquivo(nome do arquivo));
BufferedReader br = novo BufferedReader(fr);
Linha de string = nulo;
while ((linha = br.readLine()) != null) {
String[] dados = line.split(",");
svm_node[] vetor = novo svm_node[datas.length - 1];
for (int i = 0; i < datas.length - 1; i++) {
nó svm_node = novo svm_node();
nó.índice = i + 1;
node.value = Double.parseDouble(datas[i]);
vetor[i] = nó;
}
nodeSet.add(vetor);
double lablevalue = Double.parseDouble(datas[datas.length - 1]);
rótulo.add (valor da etiqueta);
}
} catch (Exceção e) {
e.printStackTrace();
}
}
}
Dados de treinamento, a última coluna é o valor alvo
Copie o código do código da seguinte forma:
17,6,17,7,17,7,17,7,17,8
17,7,17,7,17,7,17,8,17,8
17,7,17,7,17,8,17,8,17,9
17,7,17,8,17,8,17,9,18
17,8,17,8,17,9,18,18,1
17,8,17,9,18,18,1,18,2
17,9,18,18,1,18,2,18,4
18,18,1,18,2,18,4,18,6
18.1,18.2,18.4,18.6,18.7
18,2,18,4,18,6,18,7,18,9
18,4,18,6,18,7,18,9,19,1
18,6,18,7,18,9,19,1,19,3
dados de teste
Copie o código do código da seguinte forma:
18,7,18,9,19,1,19,3,19,6
18,9,19,1,19,3,19,6,19,9
19.1,19.3,19.6,19.9,20.2
19,3,19,6,19,9,20,2,20,6
19,6,19,9,20,2,20,6,21
19,9,20,2,20,6,21,21,5
20.2,20.6,21,21.5,22