Operaciones sobre kernels

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

¿Sabías que existen distintas operaciones sobre kernels que puedes ejecutar en machine learning? En este artículo te mostraremos algunas de las operaciones sobre kernels distintos que es posible realizar, entre ellas se encuentra el entrenamiento de algoritmos.

Operaciones sobre kernels

En primera instancia, lo que haremos es entrenar un algoritmo. Esto lo haremos probando distintos kernels con diferentes valores de parámetros libres.

Primer ejercicio

#Operaciones sobre kernels: RBF
svmModel2= SVC (kernel = 'rbf', probability = True) #kernel por defecto
svmModel2.fit (x2, y2)
plot_decision_boundary_svm (x2, y2, 0.05, svmModel2)
Operaciones sobre kernels
#Operaciones sobre kernels: Polinómico

svmModel2 = SVC (kernel = 'poly', degree = 2, probability = True) svmModel2.fit (x2, y2)

plot_decision_boundary_svm (x2, y2, 0.05, svmModel2)
Operaciones sobre kernels 1

Segundo ejercicio

Lo que haremos en este segundo ejercicio es entrenar una SVM sobre un ejemplo previo.

Tenemos el modelo lineal que, como ya habíamos dicho, no sirve para generar fronteras de separación no lineal:

#Operaciones sobre kernels
#creamos el modelo
svmModel3 = SVC (kernel = 'linear', probability = True) svmModel3.fit (X3, y3)

plot_decision_boundary_svm (X3, y3, 0.05, svmModel3)
Operaciones sobre kernels 2

Por tanto, utilizaremos los kernels RBF y polinómico para crear esta frontera de separación. Veamos:

#Operaciones sobre kernels: RBF
svmModel3 = SVC (kernel= 'rbf', probability = True) #kernel por defecto
svmModel3.fit (X3, y3)

plot_decision_boundary_svm (X3, y3, 0.05, svmModel3)
Operaciones sobre kernels 3
#Operaciones sobre kernels: Polinómico
svmModel3 = SVC (kernel = 'poly', degree = 4, probability = True) #kernel por defecto
svmModel3.fit (x3, y3)

plot_decision_boundary_svm (X3, y3, 0.05, svmModel3)
Operaciones sobre kernels 4

Tercer ejercicio

Suponiendo un kernel RBD calcule el valor óptimo de C y gamma para un ejemplo determinado, ¿cuáles son las prestaciones del algoritmo para este ejemplo?

#Operaciones sobre kernels
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV

#Paso 1:
X_train, X_test, y_train, y_test = train_test_split (X3, y3, test_size = 0.3, shuffle = True, random_state = 0)

#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 = 1).fit (x_train, y_train)

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

#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 (vectorC))
plt.title ('5 - fold accuracy')
plt.show ()

#Paso 3: mostramos prestaciones en test
Copt = grid.best_params_ ['C']
Gopt = grid.best_params_ ['gamma']

svmModel3 = SVC (kernel = 'rbf', gamma = Gopt, C = Copt, probability = True).fit (x_train, y_train)

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

plot_decision_boundary_svm (X_test, y_test, 0.05, svmModel3)

Fitting 5 folds for each of 441 candidates, totalling 2205 fits

[Parallel (n_jobs = 1)]: Using backend SequentialBackend with 1 concurrent workers.

[Parallel (n_jobs = 1)]: Done 2205 out of 2205 | elapsed: 12.8s finished

best mean cross – validation score: 0.870

best parameters: {‘C’: 0.0630957344480193, ‘gamma: 1.2589254117941662}

Operaciones sobre kernels 5

Aquí hemos aprendido también otro modo de hacer barridos con dos parámetros. Hay gente que lo ve mejor con diferentes gráficas, otros con gráficos de colores como el anterior.

¿Cuál es mejor? Pues depende. Si los barridos son sobre pocos valores (por ejemplo, 4 – 3), el de gráficos distintos sería mejor. En este caso, que son 21 los valores, hacer 21 gráficas diferentes es una locura, por lo tanto, sería más óptimo representar dichos valores por medio del gráfico de colores, porque además nos va a dar el mejor parámetro, que este caso es 0.06.

La solución a este problema es aplicarle el logaritmo:

Acc (TEST): 0.85

Operaciones sobre kernels 6

El resultado nos dice que los mejores valores son C: 0.0630957344480193 y gamma: 1.2589254117941662. Pero como tenemos nuestro ejercicio en escala logarítmica, no podemos saber de qué son esos valores, porque no los podemos reconocer en la gráfica.

#Operaciones sobre kernels
import math

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

Este último print lo ponemos junto a los otros en la sección de código anterior, justo debajo de print params y print cross – validation. El import lo ponemos en la primera línea de código, encima del resto. El resultado sería:

Operaciones sobre kernels 7

Con esto tendríamos los valores reales de c y gamma.

Operaciones sobre kernels 8

¿Qué sigue?

El Big Data es una disciplina con una amplia gama de opciones que puedes estudiar. Entre ellas está el machine learning, del que hemos hecho algunos ejercicios en este post. Si quieres seguir aprendiendo sobre estas temáticas, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación de alta intensidad en la que podrás adquirir todas las herramientas teóricas y prácticas que te permitirán incursionar en un mercado laboral lleno de oportunidades. ¡No esperes más para cambiar tu futuro y solicita 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.