Regresión Logística Esparsa Multiclase

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos cómo usar la regresión logística multinomial dispersa en el conjunto de datos 20newsgroups utilizando scikit-learn. Compararemos el rendimiento de la regresión logística multinomial con la regresión logística L1 uno contra el resto.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/exceptions("Exceptions and Warnings") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49296{{"Regresión Logística Esparsa Multiclase"}} sklearn/model_selection -.-> lab-49296{{"Regresión Logística Esparsa Multiclase"}} sklearn/datasets -.-> lab-49296{{"Regresión Logística Esparsa Multiclase"}} sklearn/exceptions -.-> lab-49296{{"Regresión Logística Esparsa Multiclase"}} ml/sklearn -.-> lab-49296{{"Regresión Logística Esparsa Multiclase"}} end

Importar bibliotecas

Comenzamos importando las bibliotecas y módulos necesarios que usaremos en este laboratorio.

import timeit
import warnings

import matplotlib.pyplot as plt
import numpy as np

from sklearn.datasets import fetch_20newsgroups_vectorized
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.exceptions import ConvergenceWarning

warnings.filterwarnings("ignore", category=ConvergenceWarning, module="sklearn")

Cargar y preparar los datos

A continuación, cargamos el conjunto de datos 20newsgroups y preparamos los datos para el entrenamiento y la prueba.

## Usamos el solucionador SAGA
solver = "saga"

## Disminuir para un tiempo de ejecución más rápido
n_samples = 5000

X, y = fetch_20newsgroups_vectorized(subset="all", return_X_y=True)
X = X[:n_samples]
y = y[:n_samples]

X_train, X_test, y_train, y_test = train_test_split(
    X, y, random_state=42, stratify=y, test_size=0.1
)
train_samples, n_features = X_train.shape
n_classes = np.unique(y).shape[0]

print(
    "Dataset 20newsgroup, train_samples=%i, n_features=%i, n_classes=%i"
    % (train_samples, n_features, n_classes)
)

Definir y entrenar los modelos

Definiremos dos modelos, Regresión Logística Multinomial y Regresión Logística L1 Uno contra el Resto, y los entrenaremos con un número diferente de épocas.

models = {
    "ovr": {"name": "One versus Rest", "iters": [1, 2, 3]},
    "multinomial": {"name": "Multinomial", "iters": [1, 2, 5]},
}

for model in models:
    ## Agregar valores iniciales de nivel de azar para fines de trazado
    accuracies = [1 / n_classes]
    times = [0]
    densities = [1]

    model_params = models[model]

    ## Número pequeño de épocas para un tiempo de ejecución rápido
    for this_max_iter in model_params["iters"]:
        print(
            "[model=%s, solver=%s] Número de épocas: %s"
            % (model_params["name"], solver, this_max_iter)
        )
        lr = LogisticRegression(
            solver=solver,
            multi_class=model,
            penalty="l1",
            max_iter=this_max_iter,
            random_state=42,
        )
        t1 = timeit.default_timer()
        lr.fit(X_train, y_train)
        train_time = timeit.default_timer() - t1

        y_pred = lr.predict(X_test)
        accuracy = np.sum(y_pred == y_test) / y_test.shape[0]
        density = np.mean(lr.coef_!= 0, axis=1) * 100
        accuracies.append(accuracy)
        densities.append(density)
        times.append(train_time)
    models[model]["times"] = times
    models[model]["densities"] = densities
    models[model]["accuracies"] = accuracies
    print("Precisión de prueba para el modelo %s: %.4f" % (model, accuracies[-1]))
    print(
        "%% de coeficientes no nulos para el modelo %s, por clase:\n %s"
        % (model, densities[-1])
    )
    print(
        "Tiempo de ejecución (%i épocas) para el modelo %s:%.2f"
        % (model_params["iters"][-1], model, times[-1])
    )

Visualizar los resultados

Finalmente, visualizaremos los resultados de los modelos entrenados utilizando un gráfico de líneas.

fig = plt.figure()
ax = fig.add_subplot(111)

for model in models:
    name = models[model]["name"]
    times = models[model]["times"]
    accuracies = models[model]["accuracies"]
    ax.plot(times, accuracies, marker="o", label="Modelo: %s" % name)
    ax.set_xlabel("Tiempo de entrenamiento (s)")
    ax.set_ylabel("Precisión de prueba")
ax.legend()
fig.suptitle("Multinomial vs One-vs-Rest Logistic L1\nConjunto de datos %s" % "20newsgroups")
fig.tight_layout()
fig.subplots_adjust(top=0.85)
run_time = timeit.default_timer() - t0
print("Ejecución de ejemplo en %.3f s" % run_time)
plt.show()

Resumen

En este laboratorio, usamos scikit-learn para realizar una Regresión Logística Esparsa Multiclase en el conjunto de datos 20newsgroups. Comparamos el rendimiento de la regresión logística multinomial con la regresión logística L1 uno contra el resto, y visualizamos los resultados utilizando un gráfico de líneas.