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
ynone
.l1
utiliza la norma L1, que induce esparsidad al modelo, mientras quel2
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 sonnewton-cg
,lbfgs
,liblinear
,sag
ysaga
. 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; yrandom_state
, que se utiliza para la inicialización aleatoria.
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.modelselection import traintestsplit
from sklearn.linearmodel import LogisticRegression
from sklearn.metrics import accuracyscore
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
ysaga
. - max_iter: Establece el número máximo de iteraciones del algoritmo de optimización.
- tol: Define la tolerancia para la convergencia del algoritmo.
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)
Xtestselected = 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 = accuracyscore(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}’)
«`
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.