Vahid Mirjalili

Python Machine Learning


Скачать книгу

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 bajo la restricción de que las muestras están clasificadas correctamente. Puede escribirse así:

      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 , que se puede resolver mediante programación cuadrática. Ahora bien, como el tratamiento más detallado de la programación cuadrática queda fuera del objetivo de este libro, puedes aprender más sobre las máquinas de vectores de soporte en The Nature of Statistical Learning Theory, Springer Science+Business Media, Vladimir Vapnik (2000), o bien en la excelente explicación de Chris J.C. Burges en A Tutorial on Support Vector Machines for Pattern Recognition (Data Mining and Knowledge Discovery, 2(2): 121-167, 1998).

      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 , que presentó Vladimir Vapnik en 1995 y dio lugar a la denominada clasificación de margen blando. La motivación para introducir la variable flexible es que las restricciones lineales deben ser relajadas para los datos separables no lineales para permitir la convergencia de la optimización cuando existen errores de clasificación, bajo la penalización de coste apropiada.

      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.

      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