Spec-Zone.ru › scikit-learn

Примечание

Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.

Выбор модели лассо с помощью информационных критериев

В этом примере воспроизводится пример с рис. 2 из [ZHT2007]. Оцениватель LassoLarsIC обучается на наборе данных о диабете, а для выбора наилучшей модели используются критерии AIC и BIC.

Примечание

Важно отметить, что оптимизация для поиска alpha с помощью LassoLarsIC опирается на критерии AIC или BIC, которые вычисляются на обучающих данных, то есть непосредственно на обучающей выборке. Этот подход отличается от процедуры кросс-валидации. Сравнение двух подходов приведено в следующем примере: Выбор модели лассо: AIC-BIC / кросс-валидация.

Литература

[ZHT2007] (1,2)

Zou, Hui, Trevor Hastie, and Robert Tibshirani. «О числе степеней свободы лассо». The Annals of Statistics 35.5 (2007): 2173–2192.

# Authors: The scikit-learn developers
# SPDX-License-Identifier: BSD-3-Clause

Мы будем использовать набор данных о диабете.

from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True)
n_samples = X.shape[0]
X.head()
age sex bmi bp s1 s2 s3 s4 s5 s6
0 0.038076 0.050680 0.061696 0.021872 -0.044223 -0.034821 -0.043401 -0.002592 0.019907 -0.017646
1 -0.001882 -0.044642 -0.051474 -0.026328 -0.008449 -0.019163 0.074412 -0.039493 -0.068332 -0.092204
2 0.085299 0.050680 0.044451 -0.005670 -0.045599 -0.034194 -0.032356 -0.002592 0.002861 -0.025930
3 -0.089063 -0.044642 -0.011595 -0.036656 0.012191 0.024991 -0.036038 0.034309 0.022688 -0.009362
4 0.005383 -0.044642 -0.036385 0.021872 0.003935 0.015596 0.008142 -0.002592 -0.031988 -0.046641


Scikit-learn предоставляет оцениватель LassoLarsIC, который использует для выбора наилучшей модели информационный критерий Акаике (AIC) или байесовский информационный критерий (BIC). Перед обучением этой модели мы масштабируем набор данных.

Далее мы обучим две модели, чтобы сравнить значения, полученные с помощью AIC и BIC.

from sklearn.linear_model import LassoLarsIC
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

lasso_lars_ic = make_pipeline(StandardScaler(), LassoLarsIC(criterion="aic")).fit(X, y)

Чтобы следовать определению из [ZHT2007], нам нужно пересчитать AIC и BIC. Действительно, Zou и соавторы не учитывают некоторые постоянные слагаемые, присутствующие в исходном определении AIC, полученном из максимального логарифма правдоподобия линейной модели. См. раздел с математическими подробностями в руководстве пользователя.

def zou_et_al_criterion_rescaling(criterion, n_samples, noise_variance):
    """Rescale the information criterion to follow the definition of Zou et al."""
    return criterion - n_samples * np.log(2 * np.pi * noise_variance) - n_samples
import numpy as np

aic_criterion = zou_et_al_criterion_rescaling(
    lasso_lars_ic[-1].criterion_,
    n_samples,
    lasso_lars_ic[-1].noise_variance_,
)

index_alpha_path_aic = np.flatnonzero(
    lasso_lars_ic[-1].alphas_ == lasso_lars_ic[-1].alpha_
)[0]
lasso_lars_ic.set_params(lassolarsic__criterion="bic").fit(X, y)

bic_criterion = zou_et_al_criterion_rescaling(
    lasso_lars_ic[-1].criterion_,
    n_samples,
    lasso_lars_ic[-1].noise_variance_,
)

index_alpha_path_bic = np.flatnonzero(
    lasso_lars_ic[-1].alphas_ == lasso_lars_ic[-1].alpha_
)[0]

Теперь, когда мы получили значения AIC и BIC, можно также проверить, что минимумы обоих критериев достигаются при одном и том же значении alpha. После этого мы можем упростить следующий график.

index_alpha_path_aic == index_alpha_path_bic
np.True_

Наконец, мы можем построить график критериев AIC и BIC и соответствующего выбранного параметра регуляризации.

import matplotlib.pyplot as plt

plt.plot(aic_criterion, color="tab:blue", marker="o", label="AIC criterion")
plt.plot(bic_criterion, color="tab:orange", marker="o", label="BIC criterion")
plt.vlines(
    index_alpha_path_bic,
    aic_criterion.min(),
    aic_criterion.max(),
    color="black",
    linestyle="--",
    label="Selected alpha",
)
plt.legend()
plt.ylabel("Information criterion")
plt.xlabel("Lasso model sequence")
_ = plt.title("Lasso model selection via AIC and BIC")
Lasso model selection via AIC and BIC

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

Launch binder
Launch JupyterLite

Download Jupyter notebook: plot_lasso_lars_ic.ipynb

Download Python source code: plot_lasso_lars_ic.py

Download zipped: plot_lasso_lars_ic.zip

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

Выбор модели лассо: AIC-BIC / кросс-валидация

Выбор модели гауссовой смеси

Ранняя остановка стохастического градиентного спуска

Совместный отбор признаков с помощью многозадачного лассо

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/auto_examples/linear_model/plot_lasso_lars_ic.html

Spec-Zone.ru

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