Calcular el valor óptimo de C en un algoritmo de clasificación

Contenido del Bootcamp Dirigido por: | Última modificación: 3 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este artículo te enseñaremos una forma de calcular el valor óptimo de C en un algoritmo de clasificación.

C en regresión logística es el nivel de regularización que tiene o tienen uno o varios algoritmos. La regularización es el proceso por el cual se consideran todas las variables predictoras, pero forzando a algunos de los parámetros incluidos en estas variables a estimarse mediante valores cercanos a cero. Lo que causa esto es un sacrificio en el sesgo, ya que este aumenta un poco, pero a cambio podemos notar una evidente reducción de la varianza y, por supuesto, un modelo más simple.

Calcular el valor óptimo de C en un algoritmo de clasificación

Lo que haremos para calcular el valor óptimo de C en un algoritmo de clasificación es utilizar la validación cruzada o cross validation. Esto lo haremos por medio de la línea grid = GridSearchCV (LogisticRegression (), scoring = ‘accuracy’, param_grid = param_grid, cv = 5).

También tendremos que hacer, por supuesto, la división entre train y test. Entonces, serían en conjunto dos técnicas a utilizar para calcular el valor óptimo de C en un algoritmo de clasificación, la división train y test y la validación cruzada.

#Calcular el valor óptimo de C en un algoritmo de clasificación
from sklearn.model_selection import train_test_split

poly = PolynomialFeatures (2)
X3poly = poly.fit_transform (X3)
X_train, X_test, y_train, y_test = train_test_split (X3poly, y3, test_size = 0.3, shuffle = True, random_state = 0)

vectorC = np.logspace (-10, 2, 20)
param_grid = {'C': vectorC}
grid = GridSearchCV (LogisticRegression (), scoring = 'accuracy', param_grid = param_grid, cv = 5)
grid.fit (X_train, y_train)
print ("best mean cross - validation score: {:. 3f}".format (grid.best_score_))
print ("best parameters: {}".format (grid.best_params_))
print ("test - set score: {:. 2f}".format (grid.score (X_test, y_test)))

scores = np.array (grid.cv_results_ ['mean_test_score'])
plt.semilogx (vectorC, scores, ' -o ')
plt.xlabel ('C')
plt.ylabeel ('5 - Fold ACC')
plt.show ()
Calcular el valor óptimo de C en un algoritmo de clasificación

Los resultados nos dicen que el mejor parámetro es {‘C’: 1.2742749857031321}.

Ahora, vamos a representar la frontera de separación para el valor de C óptimo. No obstante, primero vamos a verificar, por medio de dos líneas, cuál es el C óptimo (que ya habíamos calculado arriba):

#Calcular el valor óptimo de C en un algoritmo de clasificación
C_optimo = grid.best_params_ ['C']
C_optimo

1.2742749857031321

Entonces, para representar la frontera con el C óptimo lo que hacemos es escribir lo siguiente:

#Calcular el valor óptimo de C en un algoritmo de clasificación
lr3 = LogisticRegression (C = C_optimo).fit (X_train, y_train)
plot.decision_boundary_poly (X3, y3, 0.05m lr3, poly)

El resultado es una gráfica con un accuracy de 0.86.

Si necesitáramos crear un polinomio con muchos grados, requeriríamos, de forma adicional a lo que hemos puesto en el algoritmo de arriba, un solver = ‘saga’. Recordemos que lo que hace este comando es controlar el proceso de ejecución de scikit learn cuando tenemos un polinomio con un número significativo de grados.

A pesar de que la búsqueda de parámetros libres nos proporcione un valor óptimo, quizá este está demasiado ajustado, por lo que es recomendable representar el resultado, en la medida de lo posible, e interpretarlo de forma correcta.

Casi todos los algoritmos de machine learning tienen un parámetro que controla la complejidad del mismo y tenemos que conocer cómo estos algoritmos afectan al resultado.

En la regresión lineal regularizada ese parámetro es alfa, tanto en regularización Ridge como en regularización Lasso. En el caso de la regresión logística, dicho parámetro es C.

Para calcular su valor, siempre utilizaremos una estrategia adecuada de selección del modelo (normalmente validación cruzada). Asimismo, no olvides que el conjunto de test no se toca.

No es necesario calcular el valor óptimo de C en un algoritmo de clasificación de forma manual, sino que existen técnicas y métodos, como la división train y test y la validación cruzada, que pueden ayudarnos en esta labor.

Si te ha gustado aprender más sobre esta temática y quieres seguir formándote, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva de 8 meses en la que adquirirás todas las herramientas teóricas y prácticas y todos los conocimientos necesarios para incursionar en uno de los mercados laborales mejor pagados hoy en día. ¡No esperes más para perseguir tu camino hacia el éxito y solicita información ahora!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado