Примечание
Перейти к концу, чтобы загрузить весь пример кода. или запустить этот пример в вашем браузере через JupyterLite или Binder
Выбор модели Lasso с помощью критериев информации
В этом примере воспроизводится пример из рис. 2 статьи [ZHT2007]. Эстиматор LassoLarsIC обучается на наборе данных по диабету, и критерии AIC и BIC используются для выбора лучшей модели.
Примечание
Важно отметить, что оптимизация для поиска alpha с помощью LassoLarsIC опирается на критерии AIC и BIC, которые вычисляются внутри выборки, то есть непосредственно на обучающей выборке. Этот подход отличается от процедуры перекрестной проверки. Для сравнения этих двух подходов вы можете обратиться к следующему примеру: Выбор модели Lasso: 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,095 секунды)
Связанные примеры
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/auto_examples/linear_model/plot_lasso_lars_ic.html