Use la línea de comando para llamar a libsvm para la clasificación en Windows

Objetivo: utilizar SVM para clasificar 4 tipos de muestras de características.

Paso 1: Divida el conjunto de entrenamiento y el conjunto de prueba para los 4 tipos de muestras de características (el tamaño de la muestra es 120 * 7), las etiquetas de clasificación corresponden a una de ellas y los dos conjuntos de datos y las etiquetas correspondientes se almacenan en train_sample.mat y test_sample.mat respectivamente , Donde las etiquetas de clasificación se colocan en la primera columna de los dos archivos mat.
Paso 2: Convierta el archivo en formato mat al formato utilizado por libsvm.
Paso 3: use win + R y cmd para ingresar a la ventana del símbolo del sistema de Windows.
Paso 4: Ingrese comandos para escalar, entrenar y probar los datos para obtener precisión de clasificación.

1. El contenido de la caja de herramientas libsvm:
(1) la carpeta Java, que se utiliza principalmente en la plataforma java;
(2) la carpeta Python, que es una herramienta para la optimización de parámetros, que se presentará más adelante;
(3) la carpeta herramientas, que contiene principalmente Cuatro archivos de Python, utilizados para muestreo de conjuntos de datos (subconjunto), selección de parámetros (cuadrícula), prueba de integración (fácil), verificación de datos (checkdata);
(4) La carpeta de Windows contiene cuatro paquetes exe de libSVM, las bibliotecas que usamos Son ellos. También hay un heart_scale dentro, que es un archivo de muestra, que se puede abrir con el Bloc de notas para probar.
(5) El archivo svm-toy, una herramienta visual utilizada para mostrar los datos de entrenamiento y la interfaz de clasificación, contiene el código fuente y el programa compilado está en la carpeta de Windows;
(6) El archivo heart_scale es el archivo de entrenamiento para la prueba
( 7) Otros archivos .hy .cpp son el código fuente del programa y se puede compilar el archivo .exe correspondiente. Entre ellos, los más importantes son los archivos svm.hy svm.cpp, svm-predict.c, svm-scale.cy svm-train.c (también hay un svm-toy.c en la carpeta svm-toy). Es la función de interfaz en este archivo que se llama. Después de la compilación, son los cuatro programas exe correspondientes en Windows. Además, el archivo README y las preguntas frecuentes que se encuentran dentro son buenos archivos de ayuda.

2. Formato de datos libsvm
[etiqueta] [índice1] [valor1] [índice2] [valor2]…
[etiqueta] [índice1] [valor1] [índice2] [valor2]…
etiqueta: valor objetivo, etiqueta de clasificación, generalmente algún número entero. Si es regresión, el valor objetivo es un valor continuo.
índice: valor del índice, en orden ascendente de números enteros.
valor: valor de la característica (datos de atributo), datos utilizados para el entrenamiento, generalmente compuestos por un grupo de números reales.
Copie write4libsvm.m del blog de referencia [1]. Este es un programa de conversión de formato. No necesita entenderlo. Ingrese el nombre de la función que realiza la llamada en la ventana de comandos de matlab, y luego seleccione el archivo de datos a convertir. El código de write4libsvm.m es el siguiente:

function write4libsvm 
% 为了使得数据满足libsvm的格式要求而进行的数据格式转换 注意原始格式是mat的数据格式,转化成txt或者dat都可以。
% 原始数据保存格式为: 
%             [标签 第一个属性值 第二个属性值...] 
% 转换后文件格式为满足libsvm的格式要求,即: 
%             [标签 1:第一个属性值 2:第二个属性值 3:第三个属性值 ...] 
% Genial@ustc 
% 2004.6.16 
[filename, pathname] = uigetfile( {
    
    '*.mat', ... 
       '数据文件(*.mat)'; ... 
       '*.*',                   '所有文件 (*.*)'}, ... 
   '选择数据文件'); 
try 
   S=load([pathname filename]); 
   fieldName = fieldnames(S); 
   str = cell2mat(fieldName); 
   B = getfield(S,str); 
   [m,n] = size(B); 
   [filename, pathname] = uiputfile({
    
    '*.txt;*.dat' ,'数据文件(*.txt;*.dat)';'*.*','所有文件 (*.*)'},'保存数据文件'); 
   fid = fopen([pathname filename],'w'); 
   if(fid~=-1) 
       for k=1:m 
           fprintf(fid,'%3d',B(k,1)); 
           for kk = 2:n 
               fprintf(fid,'\t%d',(kk-1)); 
               fprintf(fid,':'); 
               fprintf(fid,'%d',B(k,kk)); 
           end 
           k 
           fprintf(fid,'\n'); 
       end 
       fclose(fid); 
   else 
       msgbox('无法保存文件!'); 
   end 
catch 
end 

Elegí guardar el texto en formato txt, pero luego descubrí que había un problema cuando ingresé el comando en la ventana del símbolo del sistema de Windows. La solución clave se explicará más adelante.

3. Escala de datos
svm-scale se usa para escalar la muestra original, el rango puede ser establecido por usted mismo, generalmente [0,1] o [-1,1]. El propósito principal del escalado es: (1) evitar que una característica sea demasiado grande o demasiado pequeña, lo que desempeñará un papel desequilibrado en el entrenamiento; (2) para la velocidad de cálculo, porque la operación del producto interno o exp se usa en el cálculo del kernel El cálculo, los datos desequilibrados pueden causar dificultades de cálculo.
Uso: svm-scale [-l lower -u upper]
[-y y_lower y_upper]
[-s save_filename]
[-r restore_filename] filename
Entre ellos, [] son ​​todos opcionales: -l: establece el límite inferior de datos; inferior: El límite inferior de datos establecido, el valor predeterminado es -1; -u establece el límite superior de datos; superior: el límite superior de datos establecido, el valor predeterminado es 1; -y: si escalar el valor objetivo al mismo tiempo; y_lower es el más bajo Límite, y_upper es el límite superior; -s save_filename: significa guardar las reglas de escalado como un archivo save_filename; -r restore_filename: significa escalar de acuerdo con el archivo de reglas existente restore_filename; filename: el archivo de datos a escalar, el formato de archivo es formato libSVM.
Por ejemplo:
(1) Convierta el archivo libsvmtrain_sample al formato libSVM
svm-scale -l 0 -u 1 -s data.range libsvmtrain_sample> train_scale.txt
(2) Escale y convierta el archivo libsvmtest_sample de acuerdo con el archivo de reglas existente data.range Formato LibSVM
svm-scale -r data.range libsvmtest_sample> test_scale.txt

4. Datos de entrenamiento svm-train
svm-train implementa principalmente entrenamiento en conjuntos de datos de entrenamiento y puede obtener modelos SVM.
Uso: svm-train [options] training_set_file [model_file]
donde: (1) las opciones son parámetros operativos, y las opciones disponibles son el significado del blog de referencia [5];
(2) training_set_file son los datos que se van a entrenar (se ha escalado) ;
(3) model_file es el archivo de resultados que se guardará, llamado archivo de modelo, para usar en la predicción;
después del entrenamiento, podemos predecir los datos, pero los datos de entrenamiento pueden no ser los parámetros óptimos, por lo que se requiere una mayor optimización Aquí omitimos este paso por ahora, los lectores pueden consultar el blog [3], que tiene un proceso detallado.

V. Test data svm- predecir el
uso: svmpredict [opciones] test_file model_file output_file
Entre ellos: (1) las opciones son los parámetros operativos, y las opciones disponibles son los significados representados en el blog [5];
(2) test_file: los datos a predecir El formato del archivo debe ajustarse al formato libSVM. Incluso si no conoce el valor de label, debe completar uno a voluntad. Svmpredict dará el resultado de etiqueta correcto en output_file. Si conoce el valor de label, generará la tasa correcta;
(3) model_file : El modelo entrenado por el svm-train anterior;
(4) output_file: es el archivo de salida de svmpredict, que representa el valor de resultado predicho.

6. Ejemplo
Use win + R y cmd para ingresar a la ventana del símbolo del sistema de Windows. Ingrese el comando de la siguiente manera.
Ingrese E: (que indica ingresar al disco E), luego aparece E:>, luego ingrese la ruta cd \ (que indica ingresar al directorio raíz del disco actual),
y luego ingrese las siguientes cuatro líneas de código.
Escalado de datos: svm-scale -l 0 -u 1 -s data.range libsvmtrain_sample> train_scale.txt
svm-scale -r data.range libsvmtest_sample> test_scale.txt
Entrenamiento de datos: svm-train -t 0 -c 1.4142 train_scale.txt
Prueba de datos del modelo : svm-predict test_scale.txt model predict_result
tendrá el problema que se muestra en la Figura 1, mostrando que el archivo no se puede abrir.
La figura 1 muestra que libsvmtrain_sample no se puede abrir
La solución es cambiar el formato del archivo de datos de entrenamiento y el archivo de datos de prueba, haga clic en el sufijo .txt, el icono del archivo quedará en blanco, pero aún se puede abrir con el Bloc de notas.
Vuelva a ingresar el comando anterior, el problema está resuelto, como se muestra en la Figura 2.
Figura 2 Comandos de entrada y resultados de la prueba
Los resultados de la prueba muestran que la precisión de la clasificación es del 90%.

Consulte el blog
[1] Cómo convertir al formato de datos compatible con libsvm y realizar análisis de regresión.
[2] El entorno MATLAB utiliza análisis de formato de datos LIBSVM (2).
[3] Introducción a libsvm y descripción de los parámetros de llamada a funciones.
[4] Cómo utilizar LIBSVM en ventanas y ejemplos.
[5] Uso y significado de los parámetros de svmtrain y svmpredict.

Supongo que te gusta

Origin blog.csdn.net/weixin_45317919/article/details/108433618
Recomendado
Clasificación