Spec-Zone.ru › scikit-learn

Примечание

Перейти к концу, чтобы скачать полный код примера или запустить этот пример в браузере с помощью 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()
Logistic Regression Path

Общее время выполнения скрипта: (0 минут 0.153 секунды)

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_logistic_path.ipynb

Download Python source code: plot_logistic_path.py

Download zipped: plot_logistic_path.zip

Связанные примеры

Коэффициенты Ridge в зависимости от L2-регуляризации

Влияние регуляризации модели на ошибку обучения и тестирования

График коэффициентов Ridge в зависимости от регуляризации

Штраф L1 и разреженность в логистической регрессии

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API