Ejemplo realista de SVM en problemas de clasificación

Autor: | Última modificación: 23 de diciembre de 2022 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

En este post veremos un ejemplo realista de SVM en problemas de clasificación. Vamos a utilizar el conjunto de datos del Pima Indian Diabetes Dataset. Recordemos que la sigla SVM significa Support Vector Machines y se traduce como máquinas de vectores soporte.

Ejemplo realista de SVM

#Ejemplo realista de SVM
#cargamos datos
data = pd.read_csv ("./data/diabetes.csv", sep = ' , ', decimal = ' , ')

#preparamos los datos
features = data.columns.drop (['Outcome'])
X = data [features).values
y = data ['Outcome'].values

print ('Dimensionalidad datos: ', X.shape)

Dimensionalidad datos: (768, 8)

Lo que haremos es ajustar un modelo de SVM al conjunto de datos anterior. Devolveremos las prestaciones en el conjunto de test y compararemos con la solución de Boosted Trees.

Nota: Best Test ACC (lo esperado) = 0.794

#Ejemplo realista de SVM
#paso 1
X_train, X_test, y_train, y_test = train_test_split (x, y, test_size = 0.3, shuffle = True, stratify = y, random_state = 0)

print ('Dimensionalidad train: ', X_train.shape)
print ("Dimensionalidad test: ', X_test.shape)

Dimensionalidad train: (537, 8)

Dimensionalidad test: (231, 8)

#Ejemplo realista de SVM
#Paso 2
vectorC = np.logspace (-3, 3, 21)
vectorG= np.logspace (-5, 1, 21)

param_grid = {'C': vectorC, 'gamma' : vectorG)

grid = GridSearchCV (SVC (kernel = 'rbf'), scoring = 'accuracy', param_grid = param_grid, cv = 5, verbose = 2).fit (x_train, y_train)

print ("best mean cross-validation score: {: .3f}".format (grid.best_score_))

print ("best parameters: {}.format (grid.best_params_)) print (f"Log(C): (math.log10 (grid.best_params_['C'])} \nLog (gamma): {math.log10 (grid.best_params_ ['gamma'])}")

#Mostramos prestaciones en CV
scores = grid.cv_results_ ['mean_test_score'].reshape (len (vectorC), len (vectorG))

plt.figure (figsize = (10, 6))
plt.imshow (scores, interpolation = 'nearest', vmin = 0.6, vmax = 0.9)
plt.xlabel ('log (gamma)')
plt.ylabel ('log (C)')
plt.colorbar ()
plt.xticks (np.arange (len (vectorG)), np.log10 (vectorG), rotation = 90)
plt.yticks (np.arange (len (vectorC)), np.log10 (vector))
plt.title ('5 - fold accuracy')
plt.show ()
Ejemplo realista de SVM

Lo primero que vemos en los resultados es que el cross – validation score ha dado 0.76, lo que quiere decir que más o menos coincide con el esperado, que era 0.79.

Nos impide ver bien qué es lo que está pasando. Es decir, este barrido no es el óptimo para este ejercicio, ya que no podemos saber cuál es el mejor valor.

Lo que haremos, por tanto, es disminuir el vmax = 0.8. El resultado será:

Ejemplo realista de SVM en problemas de clasificación 1

Vemos que en el sector derecho no hay nada, aparentemente, y que en el sector izquierdo es donde es probable que se encuentre el mejor accuracy. ¿Qué haríamos en este caso?

Lo que podemos hacer es modificar el vector C y el vector G, por lo que quedaría:

#Ejemplo realista de SVM
vectorC = np.logspace (-1, 6, 21)
vectorG= np.logspace (-10, 2, 21)

El resultado sería:

Ejemplo realista de SVM en problemas de clasificación 2

No ha quedado nada mal, ha mejorado bastante respecto al anterior.

Con esto corroboramos que el mejor accuracy se encuentra en este rango de valores. En la realidad, no nos quedaríamos con este modelo, sino que lo volveríamos mucho más complejo, aumentándole el valor de C, y seguiríamos bajando a ver qué pasa.

Si el mejor accuracy sigue dándonos en el rango inicial, es decir, si hay algún punto en el que mejora, pero solo un poco, nos quedaríamos con el modelo más simple, a no ser que veamos que las prestaciones nos están subiendo en cantidades grandes.

#Ejemplo realista de SVM
#Paso 3
Copt = grid.best_params_ ['C']
Gopt = grid.best_params_ ['gamma']

svmModel = SVC (kernel = 'rbf', gamma = Gopt, C = Copt).fit (X_train, y_train)

print ('Acc (TEST): %0.2f'% svmModel.score (X_test, y_test))

Acc (TEST): 0.77

¿Qué sigue?

Si quieres seguir entendiendo la disciplina del Big Data y mejorar tus oportunidades laborales, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación de alta intensidad en la que tendrás la oportunidad de adquirir los conocimientos suficientes para incursionar en el mercado de la tecnología. ¡No esperes más para seguir forjando tu camino y solicita más información ahora!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

¿Trabajo? Aprende a programar y consíguelo.

¡No te pierdas la próxima edición del Aprende a Programar desde Cero Full Stack Jr. Bootcamp!

 

Prepárate en 4 meses, aprende las últimas tecnologías y consigue trabajo desde ya. 

 

Solo en España hay más de 120.400 puestos tech sin cubrir, y con un sueldo 11.000€ por encima de la media nacional. ¡Es tu momento!

 

🗓️ Próxima edición: 13 de febrero

 

Reserva tu plaza descubre las becas disponibles.