备注
Go to the end 下载完整的示例代码。或者通过浏览器中的MysterLite或Binder运行此示例
通过信息标准选择Lasso模型#
该示例再现了中图2的示例 [ZHT2007]. A 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
使用Akaike信息准则(AIC)或Bayesian信息准则(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的比例。事实上,与从线性模型的最大log似然推导出的AIC的原始定义相比,Zou等人忽略了一些常数项。你可以参考 mathematical detail section for the User Guide .
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")

Total running time of the script: (0分0.069秒)
相关实例
Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>
_