套索模型选择

Beginner

This tutorial is from open-source community. Access the source code

简介

在本实验中,我们将学习如何使用 LassoLarsIC 估计器,通过 AIC 和 BIC 准则来选择最佳的 Lasso 模型。我们将使用 scikit-learn 中的糖尿病数据集。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

加载数据

我们将使用 load_diabetes 方法从 scikit-learn 中加载糖尿病数据集。

from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True)

数据预处理

我们将使用 StandardScaler 方法对数据集进行缩放,并使用 AIC 准则拟合 LassoLarsIC 估计器。

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

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

重新缩放 AIC 和 BIC

我们需要重新缩放 AIC 和 BIC,使其符合 [ZHT2007] 中的定义。

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

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]

使用 BIC 准则拟合 LassoLarsIC 估计器

我们现在将使用 BIC 准则拟合 LassoLarsIC 估计器。

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 准则

我们将绘制 AIC 和 BIC 准则以及随后选定的正则化参数。

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")

总结

在本实验中,我们学习了如何使用 LassoLarsIC 估计器,通过 AIC 和 BIC 准则来选择最佳的 Lasso 模型。我们还学习了如何重新缩放 AIC 和 BIC,使其符合 [ZHT2007] 中的定义。