Cómo realizar la ponderación de funciones según el paquete de instalación libsvm
1.[Cálculo] Descargar
Descargue la última versión del paquete de software en la página de inicio de LIBSVM y extráigalo al directorio apropiado.
Compilar
Si utiliza un sistema operativo de 64 bits y Matlab, no necesita compilar, porque el paquete de software integrado ya contiene la versión compilada de 64 bits: libsvmread.mexw64, libsvmwrite.mexw64, svmtrain .mexw64, svmpredict.mexw64; de lo contrario, deberá compilar el archivo binario usted mismo.
Primero ingrese el directorio matlab (como C:\libsvm-3.17\matlab) en el directorio raíz LIBSVM en Mtlab e ingréselo en la ventana de comandos.
gt gtMexico – Configuración
Luego Matlab le pedirá que seleccione un compilador C/C para compilar archivos mex y luego seleccione un compilador instalado, como Microsoft Visual C 2010. Luego Matlab le pedirá que confirme el compilador seleccionado, ingrese y para confirmar.
Luego puedes ingresar el siguiente comando para compilar.
gt gt manufacturer
Tenga en cuenta que las versiones bajas de Matlab o VC pueden causar fallas en la compilación. 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)
Después de la compilación, aparecerán dos archivos en el directorio actual, a saber, svmtrain.mexw64 y svmpredict.mexw64 (sistema de 64 bits) o svmtrain.mexw32 y svmpredict.mexw32 (sistemas de 32 bits), los nombres de archivo de svmtrain y svmtrain se cambiarán a libsvmtrain y libsvmtrain en consecuencia.
Esto se debe a que Matlab tiene su propia caja de herramientas SVM y los nombres de las funciones son svmtrain y svmpredict, que son los mismos que los nombres predeterminados de LIBSVM. A veces habrá algunos problemas en el uso real. Por ejemplo, si desea llamar a LIBSVM, debe llamar a Matlab SVM.
Si hay algún cambio de nombre, las llamadas futuras a LIBSVM siempre usarán los nombres libsvmtrain y libsvmprection.
4. Agregar ruta
Para facilitar el uso en el futuro, se recomienda agregar la ruta donde se encuentra el archivo compilado LIBSVM en la ruta de búsqueda de matlab (como C: \libsvm-3.17\matlab). Las operaciones específicas son las siguientes: (la versión china de Matlab procede en consecuencia)
Página de inicio - gt; establecer ruta - gt; agregar carpeta - gt; agregue la ruta donde se encuentra el archivo compilado (por ejemplo, C; :\libsvm-3.17\matlab).
Por supuesto, también puede copiar los cuatro archivos compilados a la ubicación deseada y luego agregar la ruta a la ruta de búsqueda de Matlab.
Dos pruebas
El paquete de software LIBSVM viene con datos de prueba. Los datos de prueba son el archivo heart_scale en el directorio raíz del paquete de software, que se puede utilizar para probar si LIBSVM es. instalado exitosamente. El archivo heart_scale aquí no puede ser leído por la carga de Matlab y debe ser leído por libsvmread.
Ingrese al directorio raíz de LIBSVM y ejecute el siguiente código (debido a 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] = libsvmppredict(heart_scale_label, heart_scale_inst, model);
Si LIBSVM se instala correctamente, aparecerán los siguientes resultados de ejecución y la tasa de visualización correcta es 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 introducción principales a los principios
Antes de usar SVM, primero debe comprender el principio de funcionamiento de SVM. Aquí hay una breve introducción.
SVM (Support Vector Machine) es un método de aprendizaje automático supervisado que puede aprender las características de diferentes tipos de muestras conocidas y luego predecir muestras desconocidas.
SVM es esencialmente un algoritmo de clasificación binaria. Para muestras de entrada en un espacio N-dimensional, encuentre un hiperplano de clasificación óptimo para que los dos tipos de muestras puedan obtener el mejor efecto de clasificación bajo este hiperplano. Esta optimización se puede medir por la distancia entre los dos tipos de muestras y el punto más cercano a este hiperplano. Esta distancia se llama distancia al borde. Cuanto mayor sea la distancia al borde, más separadas estarán las dos muestras. SVM consiste en encontrar el hiperplano con la mayor distancia al borde, que se puede resolver resolviendo un problema de optimización con parámetros de hiperplano como variables de solución. Dadas las restricciones apropiadas, este es un problema de optimización cuadrática que puede resolverse resolviendo el problema dual usando condiciones KKT.
Para problemas que no son separables linealmente, no podemos clasificar encontrando el hiperplano de clasificación óptimo. En este momento, SVM hace que las muestras en el espacio N-dimensional sean linealmente separables al asignarlas a un espacio de dimensiones superiores. En el algoritmo real, SVM realmente no necesita mapear los puntos de muestra, porque el cálculo del espacio de alta dimensión involucrado en el algoritmo siempre aparece en forma de un producto interno. Se puede obtener encontrando el producto interno en el. espacio N-dimensional original y luego realizar una transformación. Una función que calcula el producto interno de dos vectores que implícitamente se asigna a un espacio de alta dimensión se denomina aquí función central. 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 de dos clases, se puede extender a un clasificador de múltiples clases. Los métodos comúnmente utilizados incluyen uno versus resto y uno versus uno. En el método uno a muchos, una de las K muestras de clase se clasifica en una clase, las demás se clasifican a su vez en otra clase y se entrena un clasificador binario utilizando SVM binario. Finalmente, los clasificadores binarios de clase K obtenidos se combinan en un clasificador K. Al clasificar muestras desconocidas, utilice estos k clasificadores binarios para clasificarlas respectivamente y utilice la categoría con más apariciones en los resultados de clasificación como resultado de clasificación final. En el método uno a uno, se entrena un clasificador binario en dos muestras cualesquiera durante el entrenamiento y, finalmente, se obtienen k*(k-1)/2 clasificadores binarios, * * * formando K clasificadores.
Al clasificar muestras desconocidas, se utilizan todos los clasificadores k*(k-1)/2 para la clasificación y la categoría con más apariciones se utiliza como resultado de clasificación final de la muestra.
Se implementan múltiples clasificaciones en LIBSVM según un método uno a uno.
4. Uso
Para el uso de LIBSVM en matlab, consulte el archivo README en el directorio de Matlab en el paquete de software. Aquí haremos una traducción y explicaremos algunos detalles. .
1. Entrenamiento
Utilice la función Libsvm para entrenar los datos en el conjunto de entrenamiento para obtener el modelo entrenado.
model = libsvmtrain(training_label_vector,training_instance_matrix[, 'libsvm_options']);
Esta función tiene tres parámetros, entre los cuales
-training_label_vector: etiqueta de clase de la muestra de entrenamiento. Si hay m muestras, es una matriz de m x 1 (el tipo debe ser doble). Puede ser una clasificación binaria o una clasificación de clases múltiples. La etiqueta de clasificación es (-1, 1), (1, 2, 3) o cualquier otro número utilizado para representar diferentes clasificaciones, que deben convertirse a un tipo doble.
-training_instance_matrix: Características de las muestras de entrenamiento. Si hay m muestras, cada característica de muestra es n-dimensional, que es una matriz m × n (el tipo debe ser doble).
-libsvm_options: parámetros de entrenamiento, descritos detalladamente en el punto 3.
Predicción
La función libpredict se utiliza para probar los datos del conjunto de prueba y también puede predecir muestras desconocidas.
[Etiqueta de predicción, precisión, valor de decisión/estimación de probabilidad]
= libsvmppredict(testing_label_vector, testing_instance_matrix, model[,' libsvm_options']); La función incluye 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 de 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: Características de la muestra de prueba. Si hay m muestras y cada muestra tiene n dimensiones, es una matriz m×n (el tipo debe ser doble).
-model: Utiliza el modelo devuelto por libsvmtrain.
-libsvm_options: Los parámetros de predicción tienen la misma forma que los parámetros de entrenamiento.
3. Parámetros de entrenamiento
Se pueden seleccionar muchos parámetros durante el entrenamiento de LIBSVM, incluidos:
-s tipo de svm: tipo de configuración de svm (el valor predeterminado es 0)
0—C-SVC; 1—v-SVC; 2—un SVM; 3—e-SVR; 4-v-SVR
-tTipo de función Kernel: función Kernel tipo de configuración (el valor predeterminado es 2)
0 – función del núcleo lineal: u'v
1 – función del núcleo polinomial: (r * u' v coef0) veces
2–Función del núcleo RBF: EXP (-R | U-V | 2)
3–Función del núcleo sigmoidea: tanh(r*u'v coef0)
-d grado: configuración de grados en la función del núcleo (para la función del núcleo polinómica) (el valor predeterminado es 3)
-g r(gamma): configuración de la función gamma en la función del núcleo (para la función del núcleo polinómica/rbf/sigmoide) (el valor predeterminado es 1/k, donde k es el número total de categorías).
-r coef0: configuración de coef0 en la función del kernel (para función del kernel polinomio/sigmoide) ((el valor predeterminado es 0)
-c cost: establece C-SVC, e - SVR , Parámetros de v-SVR (función de pérdida) (predeterminado 1).
-n nu: establece los parámetros de v-SVC, I-level SVM y v-SVR (predeterminado 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 contracción: si se usa heurística, 0 o 1 (el valor predeterminado es 1 > -wi peso: establece el parámetro c de qué clase). al peso * c (c en c-SVC) (el valor predeterminado es 1)
-v n: modo de prueba interactivo n-múltiple, donde n es plegado El número de veces debe ser mayor o igual a 2.
Estas configuraciones de parámetros se pueden combinar de cualquier forma según el tipo de SVM y los parámetros admitidos por la función del núcleo. Si los parámetros establecidos no están en la función o el tipo de SVM, el programa no los aceptará. parámetros La configuración del parámetro es incorrecta y se utilizará el valor predeterminado
4. Contenido del retorno de entrenamiento
La función libsvmtrain devuelve el modelo clasificador SVM entrenado, que se puede utilizar para. predecir muestras desconocidas El modelo es una estructura compuesta por 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)
La configuración de grado en -d función del núcleo (para la función del núcleo polinomial) (el valor predeterminado es 3);
La función R(gamma) se establece en la función del núcleo -g (para la función del núcleo polinomio/rbf/sigmoidea) (recíproca del número predeterminado de categorías);
Coef0 se establece en la función del núcleo -r ( para función de núcleo polinómico/sigmoideo)((el valor predeterminado es 0)
-nr_class: indica cuántas clases hay en el conjunto de datos. Por ejemplo, en el caso de la clasificación binaria, el valor es 2.
- totalSV: representa el número total de vectores de soporte
-rho: El recíproco del término constante en la función de decisión wx b (-b)
-Label: representa la etiqueta de la categoría en el conjunto de datos 1 y -1, común en la clasificación binaria.
-ProbA: el valor utilizado para la estimación de probabilidad cuando se utiliza el parámetro -b. de lo contrario, está vacío.
-ProbB: el parámetro -b se utiliza para la estimación de probabilidad; de lo contrario, está vacío.
-nSV: Indica el número de vectores de soporte para cada tipo de muestra, correspondiente a la etiqueta de categoría de Label. Por ejemplo, Etiqueta = [1; -1], nSV = [63; 67], 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. Si la característica es n-dimensional y tiene m vectores de soporte, es una matriz dispersa de m×n.
Además, si usa el parámetro -v para la validación cruzada en el entrenamiento, no es un modelo, sino la precisión de la clasificación de validación cruzada o la raíz del error cuadrático medio de la regresión.
5. Predecir lo que se devolverá
La función libsvmtrain tiene tres valores de retorno. Los valores innecesarios se pueden reemplazar por ~ en Matlab.
-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 cuadrática de la regresión.
-decision_values/prob_estimates: El tercer valor de retorno, una matriz que contiene los valores o estimaciones de probabilidad de la decisión. Para el problema de N muestras de predicción y K categorías, si se especifica el parámetro "-b 1", cada fila de la matriz N × K representa la probabilidad de que la muestra pertenezca a cada categoría si el parámetro "-b 1" es; no especificado, entonces es una matriz de n×k *(k-1)/2, y cada fila representa los resultados de predicción de k(k-1)/2 SVM binarias.
Leer o guardar
La función LIBSVMread puede leer 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 de la muestra y las características correspondientes.
La función LIBSVMwrite puede llamar a la matriz de Matlab para almacenarla como un archivo en formato libsvm.
libsvmwrite('data.txt ', label_vector,stance_matrix)
Esta función tiene tres entradas, a saber, el nombre del archivo guardado, la etiqueta de clase de la muestra y la característica correspondiente (debe ser doble tipo de matriz dispersa).
Actualización 5: instalación de la extensión svdd (2014.10)
Descargue la caja de herramientas svdd del sitio web oficial de libsvm. Actualmente, se utilizan las versiones libsvm3.18 y svdd3.18.
Hay una carpeta matlab y tres archivos svm.cpp, svm.h y svm-train.c en la caja de herramientas svdd.
Sobrescriba el archivo svmtrain.c en la carpeta matlab con el archivo en la carpeta matlab del libsvm original.
Sobrescriba los tres archivos svm.cpp, svm.h y svm-train.c con los mismos archivos en la carpeta libsvm.
Instalación México - instalación, producción y más. Siga el método descrito al principio de este artículo y cambie el nombre y agregue rutas según sea necesario.