Spec-Zone.ru › scikit-learn

Примечание

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

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

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

Примечание

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

Список литературы

[ZHT2007] (1,2)

Zou, Hui, Trevor Hastie, and Robert Tibshirani. «On the degrees of freedom of the lasso.» 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,095 секунды)

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

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

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

Выбор модели Gaussian Mixture Model

Раннее прекращение Stochastic Gradient Descent

Основные улучшения scikit-learn 0.24

© 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

Spec-Zone.ru

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