Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo ejecutar el programa bajo la ruta matab de libsvm

Cómo ejecutar el programa bajo la ruta matab de libsvm

Instalación única

1. Descargar

Descargue la última versión del paquete de software desde la página de inicio de LIBSVM y extráigalo al directorio correspondiente.

2. Compilar

Si estás utilizando un sistema operativo de 64 bits y Matlab, no necesitas realizar el paso de compilación, porque la versión compilada de 64 bits ya está incluida. en el paquete de software adjunto: libsvmread .mexw64, libsvmwrite.mexw64, svmtrain.mexw64 y svmpredict.mexw64. De lo contrario, deberás compilar estos binarios tú mismo.

Primero vaya al directorio matlab en el directorio raíz de LIBSVM en Mtlab (por ejemplo, C:\libsvm-3.17\matlab) y escriba en la ventana de comandos

gt; ; mex -setup

Luego Matlab le pedirá que elija compilar el archivo mex. Seleccione el compilador C/C instalado, como Microsoft Visual C 2010. Matlab le pedirá que confirme la selección del compilador. Por favor escriba y para confirmar.

Luego ingresa el siguiente comando para compilar.

gt;gt;make

Tenga en cuenta que las versiones inferiores de Matlab o VC pueden provocar errores de compilación, por lo que se recomienda utilizar la última versión.

Después de una compilación exitosa, aparecerán varios archivos con el sufijo mexw64 (sistema de 64 bits) o mexw32 (sistema de 32 bits) en el directorio actual.

3. Cambiar nombre (opcional, pero recomendado)

Una vez completada la compilación, los archivos svmtrain.mexw64 y svmpredict.mexw64 volverán a aparecer en el directorio actual (aplicable a sistemas de 64 bits). ) O svmtrain.mexw32, svmpredict.mexw32 (para sistemas de 32 bits).

Esto se debe a que Matlab viene con su propia caja de herramientas SVM, cuyos nombres de funciones son svmtrain y svmpredict, que son los mismos que el LIBSVM predeterminado, lo que a veces causa algunos problemas en el uso real.

Si cambia el nombre de la función, siempre podrá utilizar los nombres libsvmtrain y libsvmpredict cuando utilice LIBSVM en el futuro.

4. Agregar ruta

Para mayor comodidad, se recomienda agregar la ruta del archivo compilado LIBSVM en la ruta de búsqueda de Matlab (por ejemplo, C:\libsvm-3.17\). matlab). Las operaciones específicas son: (correspondiente a la versión china de Matlab)

HOME -gt; Set Path -gt; Add Folder -gt; Agrega la ruta donde se encuentra el archivo compilado (como C:\). libsvm-3.17\matlab)

Por supuesto, también puede copiar los cuatro archivos compilados donde sean necesarios y luego agregar la ruta a la búsqueda de Matlab.

Por supuesto, también puedes copiar los cuatro archivos compilados a la ubicación deseada y luego agregar la ruta a la ruta de búsqueda de Matlab.

Pruebas

El paquete LIBSVM proporciona datos de prueba en forma de un archivo heart_scale, que se encuentra en el directorio raíz del paquete y se puede utilizar para probar si la instalación de LIBSVM es correcta. exitoso. El archivo heart_scale no se puede leer con la carga de Matlab, pero debe leerse con libsvmread.

Ingrese al directorio raíz de LIBSVM y ejecute el siguiente código (dado que el archivo heart_scale no se agrega a la ruta de búsqueda, no se puede acceder a él en otras rutas):

[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');

model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');

[predict_label, precision, dec_values] = libsvmpredict (heart_scale_label, heart_scale_inst, model);

Si LIBSVM se instala correctamente, se mostrarán los siguientes resultados de ejecución, con una precisión de 86,6667.

*

Optimización completada, #iter = 134

nu = 0.433785

obj = -101.855060, rho = 0.426412

nSV = 130, nBSV = 107

NSV total = 130

Precisión = 86,6667 (234/270) (Clasificación)

Tres principios

Antes de usar SVM, debe comprender cómo funciona, que se presenta brevemente a continuación.

SVM (Support Vector Machine) es un método de aprendizaje automático supervisado que puede aprender las características de muestras conocidas de diferentes categorías y luego predecir muestras desconocidas.

SVM es esencialmente un algoritmo de clasificación binaria para el espacio n-dimensional de muestras de entrada, encuentra un hiperplano de clasificación óptimo para que los dos tipos de muestras bajo este hiperplano puedan obtener los mejores resultados. Esta optimización se puede medir por la distancia desde el punto más cercano al hiperplano en los dos tipos de muestras hasta el hiperplano, lo que se denomina margen. Cuanto mayor es el margen, mayor es el grado de separación entre los dos tipos de muestras. es encontrar el margen máximo del hiperplano, que se puede resolver resolviendo un problema de optimización con parámetros de hiperplano como variables de solución. Considerando las restricciones apropiadas, este es un problema de optimización cuadrática que puede resolverse, por ejemplo, resolviendo un problema binario con condiciones KKT.

Para problemas separables no lineales, es imposible clasificar encontrando el hiperplano de clasificación óptimo. En este momento, SVM asigna la muestra desde un espacio de n dimensiones a un espacio de dimensiones superiores, de modo que la muestra esté en. una dimensión superior. En el algoritmo real, SVM en realidad no necesita mapear los puntos de muestra, porque el cálculo del espacio de alta dimensión involucrado en el algoritmo siempre se realiza en forma de producto interno, y el producto interno del espacio de alta dimensión puede se calcula a partir del espacio n-dimensional original. Encuentre el producto interno y luego transfórmelo para obtener el producto interno de los dos vectores. El producto interno que se asigna implícitamente al espacio de alta dimensión en el cálculo se llama función central. . SVM puede elegir diferentes funciones del kernel según la naturaleza del problema y el tamaño de los datos. SVM puede elegir diferentes funciones del kernel según la naturaleza del problema y el tamaño de los datos.

Aunque SVM es esencialmente un clasificador binario, se puede extender a un clasificador múltiple. Los métodos comunes incluyen uno contra muchos y uno contra uno. En el método uno a muchos, el método de entrenamiento es clasificar una clase de k muestras en una clase por turno, y el resto en otra clase, usar SVM binario para entrenar un clasificador binario y finalmente usar los k clasificadores binarios obtenidos. El clasificador está compuesto por k clasificadores. Al clasificar muestras desconocidas, utilice estos k clasificadores binarios para clasificarlas y utilice la categoría con la frecuencia más alta en los resultados de clasificación como resultado de clasificación final.

En el método uno a uno, durante el proceso de entrenamiento, se entrena un clasificador binario para dos tipos de muestras cualesquiera, y finalmente se obtienen k * (k-1) / 2 clasificadores binarios, y los k clasificadores finales tienen el mismo composición. Al clasificar una muestra desconocida, se utilizarán todos los clasificadores k*(k-1)/2 para clasificarla, y la categoría con la frecuencia más alta se utilizará como resultado de clasificación final de la muestra.

La clasificación múltiple en LIBSVM se basa en un método uno a uno.

Cuatro usos

Para usar LIBSVM en Matlab, puede consultar el archivo README en el directorio matlab del paquete de software. La siguiente es la traducción del contenido y algunos detalles.

1. Entrenamiento

La función libsvm se utiliza para entrenar los datos en el conjunto de entrenamiento para obtener un modelo entrenado.

model = libsvmtrain(training_label_vector, Training_instance_matrix [, 'libsvm_options']);

Esta función tiene tres parámetros, entre los que

-training_label_vector: muestra de entrenamiento. La etiqueta de clase, si hay m muestras, es una matriz de mx 1 (el tipo debe ser doble). Aquí puede ser binario y multicategoría, las etiquetas de categoría son (-1, 1), (1, 2, 3) o cualquier otro número utilizado para representar diferentes categorías, que se convertirán a tipo doble.

-training_instance_matrix: Características de las muestras de entrenamiento Si hay m muestras y las características de cada muestra son n-dimensionales, entonces es una matriz m x n (el tipo debe ser doble).

-libsvm_options: parámetros de entrenamiento, ver punto 3 para más detalles.

2. Predicción

La función libpredict se utiliza en los datos del conjunto de prueba y predice muestras desconocidas.

[predicted_label, precision, decision_values/prob_estimates]

= libsvmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options']);

Esta función requiere cuatro parámetros, entre los cuales

- testing_label_vector: la etiqueta de clase de la muestra de prueba, si hay m muestras, es una matriz m x 1 (el tipo debe ser doble). Si se desconoce la etiqueta de clase, se puede inicializar en una matriz doble arbitraria de mx 1.

-testing_instance_matrix: Las características de la muestra de prueba. Si hay m muestras y las características de cada muestra son n-dimensionales, es una matriz mx n (el tipo debe ser doble).

-model: utiliza el modelo devuelto por libsvmtrain

-libsvm_options: parámetros de predicción, de la misma forma que durante el entrenamiento.

3. Parámetros para el entrenamiento

Los parámetros que se pueden seleccionar durante el entrenamiento de LIBSVM incluyen:

-s tipo de svm: tipo de configuración de SVM (el valor predeterminado es 0)

0 - C-SVC; 1 - v-SVC; 2 - SVM tipo I; 3 - e-SVR; 4 - v-SVR

-t tipo de función del núcleo: núcleo Tipo de configuración de función (el valor predeterminado es 2)

0 - Función de núcleo lineal: u'v

1 - Función de núcleo polinómico: (r*u'v coef0)^grado

2 - Función del núcleo RBF (base radial): exp(-r|u-v|^2)

3 - Función del núcleo sigmoideo: tanh(r*u'v coef0)

-d grado: la configuración del orden en la función del núcleo (función del núcleo polinómica) (el valor predeterminado es 3)

-g r(gamma): la configuración de la función gamma en la función del núcleo (polinomio/rbf/ función del núcleo sigmoideo) (el valor predeterminado es 1/k, k es el número total de categorías)

-r coef0: configuración de coef0 en la función del núcleo (función del núcleo polinomio/seno-coseno) (el valor predeterminado es 0)

-c cost: establece los parámetros (función de pérdida) de C-SVC, e-SVR y v-SVR (el valor predeterminado es 1)

-n nu: configura v-SVC, Parámetros SVM tipo I y v-SVR (función de pérdida) (el valor predeterminado es 0,5)

-p p: establece el valor de la función de pérdida p en e-SVR (el valor predeterminado es 0,1)

-m cachesize: establece el tamaño de la memoria caché en MB (el valor predeterminado es 40)

-e eps: establece los criterios de terminación permitidos (el valor predeterminado es 0,001)

-h reducción: si para usar heurístico, 0 o 1 (el valor predeterminado es 1)

-wi peso: establezca el parámetro C del primer tipo en peso*C (C en C-SVC) (el valor predeterminado es 1)

-v n: modo de prueba de interacción de n veces, n es el número de pliegues, que debe ser mayor o igual a 2

Estas configuraciones de parámetros se pueden configurar en cualquier combinación según el tipo de SVM y los parámetros admitidos por la función del kernel si el parámetro establecido no está disponible en la función o el tipo de SVM y no tiene ningún impacto, el programa no aceptará el parámetro si el parámetro no es válido debido a una configuración de parámetro incorrecta; el parámetro se utilizará como valor predeterminado.

4. Contenido devuelto por el entrenamiento

La función libsvmtrain devuelve un modelo clasificador SVM entrenado que se puede utilizar para predecir muestras desconocidas. El modelo es una estructura que contiene los siguientes miembros:

-Parámetros: una matriz de 5 x 1, representada de arriba a abajo:

-s Tipo SVM (predeterminado 0

-t Tipo de función del núcleo (el valor predeterminado es 2)

-d Configuración de grado en la función del núcleo (función del núcleo polinómica) (el valor predeterminado es 3);

-g El Configuración de la función r (gamma) en la función del núcleo (para la función del núcleo polinomio/rbf/sigmoide) (el valor predeterminado es el inverso del número de categorías);

-r La configuración de coef0 en la función del núcleo (para función del núcleo polinomio/sigmoideo) (el valor predeterminado es 0);

-nr_class: indica cuántas categorías hay en el conjunto de datos, por ejemplo, para la clasificación binaria, el valor es 2.

-totalSV: ​​Indica el número total de vectores de soporte.

-rho: El valor opuesto del término constante en la función de decisión wx b(-b).

-Tag:

-ProbA: Valor utilizado para la estimación de probabilidad cuando se utiliza el argumento -b, vacío en caso contrario.

-ProbB: el valor utilizado para la estimación de probabilidad cuando se utiliza el parámetro -b; de lo contrario, está vacío.

-nSV: Indica el número de vectores de soporte para cada clase de muestras correspondientes a la etiqueta de clase de Label. Por ejemplo, si Etiqueta=[1;-1], nSV=[63;67], entonces la muestra etiquetada 1 tiene 63 vectores de soporte y la muestra etiquetada -1 tiene 67 vectores de soporte.

-sv_coef: Representa el coeficiente de cada vector de soporte en la función de decisión.

-SVs: Representa todos los vectores de soporte, o una matriz dispersa de m x n si la característica es n-dimensional y tiene m vectores de soporte a****.

Además, cuando se utiliza el parámetro -v para la validación cruzada en el entrenamiento, lo que se devuelve no es el modelo, sino la exactitud de la clasificación de la validación cruzada o la raíz del error cuadrático medio de la regresión.

5. Predecir valores de retorno

La función libsvmtrain tiene tres valores de retorno. En Matlab, puede usar ~ para reemplazar valores innecesarios.

-predicted_label: el primer valor de retorno representa la etiqueta de clase prevista de la muestra.

- Precisión: el segundo valor de retorno, una matriz de 3 x 1, representa la precisión de la clasificación, el error cuadrático medio de la regresión y el coeficiente de correlación al cuadrado de la regresión.

-decision_values/prob_estimates: el tercer valor de retorno, una matriz que contiene valores de decisión o estimaciones de probabilidad. Para un problema con n muestras de predicción y k categorías, si se especifica el parámetro "-b 1", es una matriz n x k, y cada fila representa la probabilidad de que la muestra pertenezca a cada categoría si el parámetro "-b 1"; no se especifica. Es una matriz de n x k*(k-1)/2, y cada fila representa el valor predicho k(k-1)/2 de la clasificación binaria SVM.

6. Leer o guardar

La función libsvmread lee archivos de datos almacenados en formato LIBSVM.

[label_vector, instancia_matrix] = libsvmread('data.txt');

La entrada de esta función es el nombre del archivo y la salida es la etiqueta de clase y las características correspondientes de la muestra.

La función libsvmwrite almacena matrices de Matlab como archivos en formato LIBSVM.

libsvmwrite('data.txt', label_vector,stance_matrix]

Esta función tiene tres entradas, a saber, el nombre del archivo que se guardará, la etiqueta de clase de la muestra y las características correspondientes. (se requiere una matriz dispersa de tipo doble).

Actualización V: instalación de la extensión svdd (2014.10)

Descargue el paquete de herramientas svdd del sitio web de libsvm, actualmente usando libsvm 3.18 y svdd. Versiones 3.18 p>

Hay una carpeta matlab y 3 archivos svm.cpp, svm.h y svm-train.c en la caja de herramientas svdd

Cambie el archivo svmtrain.c en matlab. Vuelva a escribir el archivo svmtrain.c en la carpeta matlab del libsvm original.

Sobrescriba los tres archivos svm.cpp, svm.h y svm-train.c en el mismo archivo en .

Como se mencionó al principio de este artículo, ejecute mex -setup, make, etc. para completar la instalación, cambie el nombre y agregue rutas según sea necesario.