Regresión Logística en Scikit-Learn: Guía Completa con Ejemplos

Regresión Logística en Scikit-Learn: Guía Completa con Ejemplos

La regresión logística, a pesar de su nombre, es un algoritmo de clasificación, no de regresión. Se utiliza para estimar valores discretos (0 o 1, sí/no, verdadero/falso) a partir de un conjunto de variables independientes. En esencia, este algoritmo calcula la probabilidad de que una instancia pertenezca a una determinada clase, utilizando una función logística que transforma una combinación lineal de las variables independientes. La regresión logística es un algoritmo versátil y ampliamente utilizado en diversas áreas, como la clasificación de spam, la detección de fraudes y la predicción de la probabilidad de compra de un cliente.

Scikit-Learn, una biblioteca de aprendizaje automático de Python, ofrece una implementación robusta y flexible de la regresión logística a través del módulo sklearn.linear_model.LogisticRegression. Este módulo proporciona una variedad de parámetros que permiten personalizar el comportamiento del algoritmo, adaptándolo a las necesidades específicas del problema. En esta guía, exploraremos en profundidad el uso de la regresión logística en Scikit-Learn, desde su implementación básica hasta la optimización y el análisis de los resultados.

Comprendiendo la Regresión Logística en Scikit-Learn

La regresión logística en Scikit-Learn se basa en la clase LogisticRegression, que ofrece una amplia gama de parámetros para controlar el comportamiento del algoritmo. Estos parámetros se pueden dividir en tres categorías principales:

  • Penalización: Los parámetros de penalización (penalty) regulan la complejidad del modelo, evitando el sobreajuste. Las opciones disponibles son l1, l2, elasticnet y none. l1 utiliza la norma L1, que induce esparsidad al modelo, mientras que l2 utiliza la norma L2, que tiende a reducir la magnitud de los coeficientes. elasticnet combina la norma L1 y L2, proporcionando un equilibrio entre esparsidad y regularización. none no aplica ninguna penalización.
  • Solver: El parámetro solver determina el algoritmo de optimización utilizado para encontrar los coeficientes del modelo. Las opciones disponibles son newton-cg, lbfgs, liblinear, sag y saga. Cada uno tiene sus ventajas y desventajas en términos de velocidad, precisión y capacidad para manejar conjuntos de datos de gran tamaño.
  • Otros parámetros: Otros parámetros incluyen C, que controla la fuerza de la regularización; tol, que define la tolerancia para la convergencia del algoritmo; max_iter, que establece el número máximo de iteraciones; y random_state, que se utiliza para la inicialización aleatoria.
LEER:  JSON Schema: Validación y Estructura de Datos JSON - Guía Completa

Implementación Básica de la Regresión Logística en Scikit-Learn

Para comprender mejor el funcionamiento de la regresión logística en Scikit-Learn, comenzaremos con un ejemplo simple. Utilizaremos el conjunto de datos Iris, disponible en la propia biblioteca Scikit-Learn. Este conjunto de datos contiene información sobre las características de tres especies de flores Iris: setosa, versicolor y virginica. El objetivo es clasificar las flores en una de las tres especies basándonos en las características medidas.

«`python
import pandas as pd
from sklearn.datasets import loadiris
from sklearn.model
selection import traintestsplit
from sklearn.linearmodel import LogisticRegression
from sklearn.metrics import accuracy
score

Cargar el conjunto de datos Iris

iris = load_iris()

Crear un DataFrame de Pandas

df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df[‘target’] = iris.target

Dividir el conjunto de datos en entrenamiento y prueba

Xtrain, Xtest, ytrain, ytest = traintestsplit(df.drop(‘target’, axis=1), df[‘target’], testsize=0.25, randomstate=42)

Instanciar un modelo de Regresión Logística

model = LogisticRegression()

Entrenar el modelo

model.fit(Xtrain, ytrain)

Realizar predicciones en el conjunto de prueba

ypred = model.predict(Xtest)

Calcular la precisión del modelo

accuracy = accuracyscore(ytest, y_pred)
print(f’Precisión del modelo: {accuracy:.2f}’)
«`

En este código, primero cargamos el conjunto de datos Iris utilizando load_iris() y creamos un DataFrame de Pandas para facilitar el manejo de los datos. Luego, dividimos el conjunto de datos en conjuntos de entrenamiento y prueba utilizando train_test_split(). A continuación, instanciamos un modelo de regresión logística utilizando LogisticRegression() y lo entrenamos con los datos de entrenamiento. Finalmente, realizamos predicciones en el conjunto de prueba utilizando predict() y calculamos la precisión del modelo utilizando accuracy_score().

Personalización de la Regresión Logística en Scikit-Learn

La clase LogisticRegression ofrece una serie de parámetros que permiten ajustar el comportamiento del modelo. Los parámetros más comunes son:

  • penalty: Permite elegir el tipo de penalización a aplicar. Por defecto, se utiliza l2, que es una regularización de norma L2. l1 utiliza la norma L1, que puede producir modelos más escasos. elasticnet combina la norma L1 y L2.
  • C: Controlo la fuerza de la regularización. Un valor más alto de C indica una regularización más débil.
  • solver: Permite seleccionar el algoritmo de optimización utilizado para encontrar los coeficientes del modelo. Algunos de los solvers disponibles son newton-cg, lbfgs, liblinear, sag y saga.
  • max_iter: Establece el número máximo de iteraciones del algoritmo de optimización.
  • tol: Define la tolerancia para la convergencia del algoritmo.
LEER:  Storyboards para Software: Guía Completa para Diseñar UX Amigable

Para personalizar el modelo, simplemente hay que especificar los parámetros deseados al instanciar la clase LogisticRegression. Por ejemplo, para utilizar una regularización de norma L1 y un máximo de 100 iteraciones, podemos escribir:

python
model = LogisticRegression(penalty='l1', max_iter=100)

Selección de Variables y Optimización

La elección de las variables relevantes para el modelo es crucial para obtener resultados precisos. Una técnica común es utilizar selección de características, que consiste en identificar las características más relevantes para el modelo. Scikit-Learn ofrece una variedad de métodos para la selección de características, como SelectKBest, SelectFromModel y RFE.

«`python
from sklearn.feature_selection import SelectKBest, chi2

Seleccionar las 2 mejores características utilizando el estadístico chi-cuadrado

selector = SelectKBest(chi2, k=2)
Xtrainselected = selector.fittransform(Xtrain, ytrain)
X
testselected = selector.transform(Xtest)

Entrenar el modelo utilizando las características seleccionadas

model = LogisticRegression()
model.fit(Xtrainselected, y_train)

Realizar predicciones y evaluar el modelo

ypred = model.predict(Xtestselected)
accuracy = accuracy
score(ytest, ypred)
print(f’Precisión del modelo: {accuracy:.2f}’)
«`

En este ejemplo, utilizamos SelectKBest con el estadístico chi-cuadrado para seleccionar las dos características más relevantes para el modelo. Luego, entrenamos el modelo con las características seleccionadas y evaluamos su precisión.

Análisis de Resultados

Una vez que el modelo está entrenado, podemos analizar sus resultados para comprender su comportamiento y tomar decisiones informadas. La clase LogisticRegression ofrece una serie de atributos que proporcionan información sobre el modelo, como los coeficientes, la intersección y el número de iteraciones.

«`python

Obtener los coeficientes del modelo

coefficients = model.coef_

Obtener la intersección del modelo

intercept = model.intercept_

Obtener el número de iteraciones del modelo

niter = model.niter_[0]

print(f’Coeficientes del modelo: {coefficients}’)
print(f’Intersección del modelo: {intercept}’)
print(f’Número de iteraciones del modelo: {n_iter}’)
«`

LEER:  Función Call by Value en C: Comprender el Paso de Argumentos

Además de los atributos del modelo, podemos utilizar otras métricas para evaluar el rendimiento del modelo. Algunas de las métricas más comunes son:

  • Precisión: Mide la proporción de predicciones correctas.
  • Precisión: Mide la proporción de predicciones positivas correctas entre todas las predicciones positivas.
  • Sensibilidad: Mide la proporción de casos positivos correctamente identificados.
  • Especificidad: Mide la proporción de casos negativos correctamente identificados.
  • Curva ROC (Receiver Operating Characteristic): Representa la relación entre la tasa de verdaderos positivos y la tasa de falsos positivos para diferentes umbrales de clasificación.
  • Área bajo la curva ROC (AUC): Mide la capacidad del modelo para distinguir entre las clases.

Conclusión

La regresión logística en Scikit-Learn es un algoritmo de clasificación potente y versátil que se puede utilizar para una variedad de problemas. Al comprender los diferentes parámetros, métodos de selección de variables y métricas de evaluación, podemos utilizar la regresión logística de forma eficaz para resolver problemas de clasificación en la práctica. Recuerda que la elección del modelo y los parámetros deben basarse en las características del problema específico y en la evaluación del rendimiento del modelo.