Примечание
Перейти к концу, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.
Путь регуляризации логистической регрессии с L1-регуляризацией
Обучение моделей логистической регрессии с L1-регуляризацией на задаче бинарной классификации, построенной на основе набора данных Iris.
Модели упорядочены от наиболее регуляризованных к наименее регуляризованным. Четыре коэффициента моделей собраны и отображены в виде «пути регуляризации»: в левой части графика (при сильной регуляризации) все коэффициенты равны ровно 0. По мере ослабления регуляризации коэффициенты один за другим могут принимать ненулевые значения.
Здесь мы выбираем решатель liblinear, поскольку он позволяет эффективно оптимизировать функцию потерь логистической регрессии с негладким штрафом l1, способствующим разреженности.
Также обратите внимание, что мы задаём низкое значение допуска, чтобы убедиться, что модель сошлась до сбора коэффициентов.
Мы также используем warm_start=True: это означает, что коэффициенты моделей повторно используются для инициализации следующего обучения модели, чтобы ускорить вычисление полного пути.
# Authors: The scikit-learn developers # SPDX-License-Identifier: BSD-3-Clause
Загрузка данных
from sklearn import datasets iris = datasets.load_iris() X = iris.data y = iris.target feature_names = iris.feature_names
Здесь мы удаляем третий класс, чтобы получить задачу бинарной классификации
X = X[y != 2] y = y[y != 2]
Вычисление пути регуляризации
import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import l1_min_c cs = l1_min_c(X, y, loss="log") * np.logspace(0, 1, 16)
Создайте конвейер с StandardScaler и LogisticRegression, чтобы нормализовать данные перед обучением линейной модели, ускорить сходимость и сделать коэффициенты сопоставимыми. Кроме того, благодаря тому, что данные теперь центрированы относительно 0, нам не нужно подбирать свободный член.
clf = make_pipeline(
StandardScaler(),
LogisticRegression(
l1_ratio=1,
solver="liblinear",
tol=1e-6,
max_iter=int(1e6),
warm_start=True,
fit_intercept=False,
),
)
coefs_ = []
for c in cs:
clf.set_params(logisticregression__C=c)
clf.fit(X, y)
coefs_.append(clf["logisticregression"].coef_.ravel().copy())
coefs_ = np.array(coefs_)
Построение графика пути регуляризации
import matplotlib.pyplot as plt
# Colorblind-friendly palette (IBM Color Blind Safe palette)
colors = ["#648FFF", "#785EF0", "#DC267F", "#FE6100"]
plt.figure(figsize=(10, 6))
for i in range(coefs_.shape[1]):
plt.semilogx(cs, coefs_[:, i], marker="o", color=colors[i], label=feature_names[i])
ymin, ymax = plt.ylim()
plt.xlabel("C")
plt.ylabel("Coefficients")
plt.title("Logistic Regression Path")
plt.legend()
plt.axis("tight")
plt.show()

Общее время выполнения скрипта: (0 минут 0.153 секунды)
Связанные примеры
© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/linear_model/plot_logistic_path.html