El uso básico del paquete de algoritmos de máquina de vectores de soporte libsvm. Lo que se demuestra aquí es la máquina de regresión de vectores de soporte.
Copie el código de código de la siguiente manera:
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;
clase pública SVM {
público estático vacío principal (String [] argumentos) {
// Defina el punto de ajuste de entrenamiento a{10.0, 10.0} y el punto b{-10.0, -10.0}, y la etiqueta correspondiente es {1.0, -1.0}
Lista<Doble> etiqueta = nueva ArrayList<Doble>();
Lista<svm_node[]> nodeSet = new ArrayList<svm_node[]>();
getData(nodeSet, etiqueta, "archivo/tren.txt");
int dataRange=nodeSet.get(0).length;
svm_node[][] datas = new svm_node[nodeSet.size()][dataRange] // Tabla de vectores del conjunto de entrenamiento;
para (int i = 0; i < datos.length; i++) {
para (int j = 0; j < rango de datos; j++) {
datos[i][j] = nodeSet.get(i)[j];
}
}
double[] etiquetas = new double[label.size()] // etiquetas correspondientes a a,b
for (int i = 0; i < etiquetas.longitud; i++) {
etiquetas[i] = etiqueta.get(i);
}
//Definir el objeto svm_problem
problema svm_problem = nuevo svm_problem();
problema.l = nodeSet.size(); // Número de vectores
problem.x = datas; //Tabla de vectores del conjunto de entrenamiento
problema.y = etiquetas; // Matriz de etiquetas correspondiente
//Definir objeto svm_parameter
svm_parameter parámetro = nuevo svm_parameter();
param.svm_type = svm_parameter.EPSILON_SVR;
param.kernel_type = svm_parameter.LINEAR;
param.cache_size = 100;
parámetro.eps = 0,00001;
parámetro C = 1,9;
//Entrena el modelo de clasificación SVM
System.out.println(svm.svm_check_parameter(problema, parámetro));
// Si no hay problema con los parámetros, la función svm.svm_check_parameter() devuelve nulo; de lo contrario, devuelve una descripción de error.
svm_model modelo = svm.svm_train(problema, parámetro);
// svm.svm_train() entrena el modelo de clasificación SVM
// Obtener datos de prueba
Lista<Doble> etiqueta de prueba = nueva ArrayList<Doble>();
Lista<svm_node[]> testnodeSet = new ArrayList<svm_node[]>();
getData(testnodeSet, testlabel, "archivo/test.txt");
svm_node[][] testdatas = new svm_node[testnodeSet.size()][dataRange] // Tabla de vectores del conjunto de entrenamiento;
para (int i = 0; i < testdatas.length; i++) {
para (int j = 0; j < rango de datos; j++) {
datos de prueba[i][j] = testnodeSet.get(i)[j];
}
}
double[] testlables = new double[testlabel.size()] // etiquetas correspondientes a a,b
for (int i = 0; i < testlables.length; i++) {
etiquetas de prueba[i] = etiquetadeprueba.get(i);
}
// Etiqueta para predecir datos de prueba
doble error = 0,0;
para (int i = 0; i < testdatas.length; i++) {
doble valor verdadero = testlables[i];
System.out.print(valor verdadero + " ");
double predictValue = svm.svm_predict(modelo, testdatas[i]);
System.out.println(predictValue);
err += Math.abs(predictValue - valor verdadero);
}
System.out.println("err=" + err / datas.length);
}
getData público estático vacío (Lista<svm_node[]> nodeSet, Lista<Double> etiqueta,
nombre de archivo de cadena) {
intentar {
FileReader fr = nuevo FileReader(nuevo archivo(nombre de archivo));
BufferedReader br = nuevo BufferedReader(fr);
Línea de cadena = nula;
mientras ((línea = br.readLine()) != nulo) {
Cadena[] datos = line.split(",");
svm_node[] vector = nuevo svm_node[datas.length - 1];
for (int i = 0; i < datos.length - 1; i++) {
svm_node nodo = nuevo svm_node();
nodo.índice = i + 1;
nodo.valor = Double.parseDouble(datos[i]);
vector[i] = nodo;
}
nodoSet.add(vector);
valor de etiqueta doble = Double.parseDouble(datos[datos.longitud - 1]);
etiqueta.add(valoretiqueta);
}
} captura (Excepción e) {
e.printStackTrace();
}
}
}
Datos de entrenamiento, la última columna es el valor objetivo
Copie el código de código de la siguiente manera:
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
datos de prueba
Copie el código de código de la siguiente manera:
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