Multiclass Sparse Logistic Regression

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir untersuchen, wie man Multiclass Sparse Logistic Regression auf dem 20newsgroups-Dataset mit scikit-learn verwendet. Wir werden die Leistung von Multinomial Logistic Regression mit One-versus-rest L1 Logistic Regression vergleichen.

Tipps für die VM

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) 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{{"Multiclass Sparse Logistic Regression"}} sklearn/model_selection -.-> lab-49296{{"Multiclass Sparse Logistic Regression"}} sklearn/datasets -.-> lab-49296{{"Multiclass Sparse Logistic Regression"}} sklearn/exceptions -.-> lab-49296{{"Multiclass Sparse Logistic Regression"}} ml/sklearn -.-> lab-49296{{"Multiclass Sparse Logistic Regression"}} end

Bibliotheken importieren

Wir beginnen mit dem Import der erforderlichen Bibliotheken und Module, die wir in diesem Lab verwenden werden.

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")

Daten laden und vorbereiten

Als nächstes laden wir das 20newsgroups-Dataset und bereiten die Daten für das Training und die Tests vor.

## Wir verwenden den SAGA-Löser
solver = "saga"

## Senken Sie diesen Wert, um die Laufzeit zu verringern
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)
)

Modelle definieren und trainieren

Wir werden zwei Modelle definieren, Multinomial und One-vs-Rest L1 Logistic Regression, und sie mit unterschiedlicher Anzahl von Epochen trainieren.

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

for model in models:
    ## Fügen Sie initiale Chance-Level-Werte hinzu, um die Grafik zu erstellen
    accuracies = [1 / n_classes]
    times = [0]
    densities = [1]

    model_params = models[model]

    ## Kleine Anzahl von Epochen für schnelle Laufzeit
    for this_max_iter in model_params["iters"]:
        print(
            "[model=%s, solver=%s] Anzahl der Epochen: %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("Testgenauigkeit für Modell %s: %.4f" % (model, accuracies[-1]))
    print(
        "%% nicht-nulle Koeffizienten für Modell %s, pro Klasse:\n %s"
        % (model, densities[-1])
    )
    print(
        "Laufzeit (%i Epochen) für Modell %s:%.2f"
        % (model_params["iters"][-1], model, times[-1])
    )

Ergebnisse visualisieren

Schließlich werden wir die Ergebnisse der trainierten Modelle mithilfe eines Liniendiagramms visualisieren.

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="Model: %s" % name)
    ax.set_xlabel("Train time (s)")
    ax.set_ylabel("Test accuracy")
ax.legend()
fig.suptitle("Multinomial vs One-vs-Rest Logistic L1\nDataset %s" % "20newsgroups")
fig.tight_layout()
fig.subplots_adjust(top=0.85)
run_time = timeit.default_timer() - t0
print("Example run in %.3f s" % run_time)
plt.show()

Zusammenfassung

In diesem Lab haben wir scikit-learn verwendet, um Multiclass Sparse Logistic Regression auf dem 20newsgroups-Dataset durchzuführen. Wir haben die Leistung der Multinomial Logistic Regression mit der one-versus-rest L1 Logistic Regression verglichen und die Ergebnisse mithilfe eines Liniendiagramms visualisiert.