y negativos que son paralelos al límite de decisión, que puede expresarse así:
Si restamos las dos ecuaciones lineales (1) y (2) entre ellas, obtenemos:
Podemos normalizar esta ecuación mediante la longitud del vector w, que se define del siguiente modo:
De este modo, llegamos a la siguiente ecuación:
La parte izquierda de la ecuación anterior puede ser interpretada como la distancia entre el hiperplano positivo y el negativo, también denominada margen, que queremos maximizar.
Ahora, la función objetiva de la SVM pasa a ser la maximización de este margen, maximizando
En este caso, N es el número de muestra de nuestro conjunto de datos.
Estas dos ecuaciones dicen básicamente que todas las muestras negativas deben caer en un lado del hiperplano negativo, mientras que todas las muestras positivas deben caer detrás del hiperplano positivo. Puede escribirse de manera compacta del siguiente modo:
En la práctica, sin embargo, es más sencillo minimizar el término recíproco
Tratar un caso separable no lineal con variables flexibles
Aunque no queremos llegar mucho más lejos en los conceptos matemáticos que se esconden detrás del margen máximo de clasificación, sí que mencionaremos brevemente la variable flexible
La variable flexible de valores positivos simplemente se añade a las restricciones lineales:
En este caso, N es el número de muestras en nuestro conjunto de datos. Así, el nuevo objetivo que se debe minimizar (sujeto a las restricciones) pasa a ser:
Mediante la variable C, podemos controlar la penalización por error de clasificación. Si C cuenta con valores amplios se producirán amplias penalizaciones de errores, mientras que si elegimos para C valores más pequeños seremos menos estrictos con los errores de clasificación. También podemos utilizar el parámetro C para controlar la anchura del margen y, así, afinar la compensación entre el sesgo y la varianza, como se muestra en la siguiente imagen:
Este concepto está relacionado con la regularización, que tratamos en la sección anterior cuando hablamos de que la regresión regularizada, al reducir el valor de C, aumenta el sesgo y disminuye la varianza del modelo.
Ahora que hemos aprendido los conceptos básicos de las SVM lineales, vamos a entrenar un modelo de SVM para clasificar las distintas flores en nuestro conjunto de datos Iris:
>>> from sklearn.svm import SVC
>>> svm = SVC(kernel='linear', C=1.0, random_state=1)
>>> svm.fit(X_train_std, y_train)
>>> plot_decision_regions(X_combined_std,
... y_combined,
... classifier=svm,
... test_idx=range(105, 150))
>>> plt.xlabel('petal length [standardized]')
>>> plt.ylabel('petal width [standardized]')
>>> plt.legend(loc='upper left')
>>> plt.show()
Las tres regiones de decisión de la SVM, que mostramos después de entrenar el clasificador en el conjunto de datos Iris mediante la ejecución del código de ejemplo, se muestran en el siguiente diagrama:
Regresión logística frente a las máquinas de vectores de soporteEn las tareas de clasificación prácticas, la regresión logística lineal y las SVM lineales a menudo proporcionan resultados muy parecidos. La regresión logística intenta maximizar las probabilidades condicionales de los datos de entrenamiento, y los hace más propensos a valores extremos o outliers que las SVM, que tienen en cuenta sobre todo los puntos más cercanos al límite de decisión (vectores de soporte). Por otro lado, la regresión logística tiene la ventaja de ser un modelo más simple y de poder implementarse más fácilmente. Además, los modelos de regresión logística pueden ser actualizados con facilidad, lo cual es un factor atractivo si se trabaja con transmisión de datos. |
Implementaciones alternativas en scikit-learn
La librería Perceptron y las clases LogisticRegression de scikit-learn, que hemos utilizado en la sección anterior, hacen uso de la librería LIBLINEAR, que es una librería C/C++ altamente optimizada desarrollada en la National Taiwan University (http://www.csie.ntu.edu.tw/~cjlin/liblinear/). De forma parecida, la clase SVC, que utilizamos para entrenar un SVM, hace uso de LIBSVM, que es una librería C/C++ equivalente especializada para SVM (http://www.csie.ntu.edu.tw/~cjlin/libsvm/).
La ventaja de utilizar LIBLINEAR y LIBSVM sobre implementaciones nativas de Python es que permiten un entrenamiento extremadamente rápido de grandes cantidades de clasificadores lineales. Sin embargo, a veces nuestros conjuntos de datos son demasiado grandes para