Примечание
Перейти в конец, чтобы скачать полный код примера или запустить этот пример в браузере с помощью JupyterLite или Binder.
Выбор модели лассо с помощью информационных критериев
В этом примере воспроизводится пример с рис. 2 из [ZHT2007]. Оцениватель LassoLarsIC обучается на наборе данных о диабете, а для выбора наилучшей модели используются критерии AIC и BIC.
Примечание
Важно отметить, что оптимизация для поиска alpha с помощью LassoLarsIC опирается на критерии AIC или BIC, которые вычисляются на обучающих данных, то есть непосредственно на обучающей выборке. Этот подход отличается от процедуры кросс-валидации. Сравнение двух подходов приведено в следующем примере: Выбор модели лассо: AIC-BIC / кросс-валидация.
Литература
# 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()
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")

Общее время выполнения скрипта: (0 минут 0.108 секунды)
Связанные примеры
© 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