Spaces:
Sleeping
Sleeping
import gradio as gr | |
import matplotlib.pyplot as plt | |
# from skops import hub_utils | |
import time | |
import pickle | |
import numpy as np | |
from sklearn.preprocessing import StandardScaler | |
from sklearn.linear_model import LassoLarsIC | |
from sklearn.pipeline import make_pipeline | |
from sklearn.datasets import load_diabetes | |
def load_dataset(): | |
X, y = load_diabetes(return_X_y=True, as_frame=True) | |
return X,y | |
def aic_pipeline(X,y): | |
lasso_lars_ic = make_pipeline(StandardScaler(), LassoLarsIC(criterion="aic")).fit(X, y) | |
return lasso_lars_ic | |
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 | |
def zou_et_all_aic(lasso_lars_ic): | |
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] | |
return index_alpha_path_aic, aic_criterion | |
def zou_et_all_bic(lasso_lars_ic): | |
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] | |
return index_alpha_path_bic, bic_criterion | |
def fn_assert_true(): | |
assert index_alpha_path_bic == index_alpha_path_aic | |
def visualize_input_data(): | |
fig = plt.figure(1, facecolor="w", figsize=(5, 5)) | |
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") | |
return fig | |
title = " Lasso model selection via information criteria" | |
with gr.Blocks(title=title) as demo: | |
gr.Markdown(f"# {title}") | |
gr.Markdown( | |
""" | |
A LassoLarsIC estimator is fit on a diabetes dataset and the AIC and the BIC criteria are used to select the best model. | |
It is important to note that the optimization to find alpha with LassoLarsIC relies on the AIC or BIC criteria that are computed in-sample, | |
thus on the training set directly. This approach differs from the cross-validation procedure | |
""" | |
) | |
gr.Markdown(" **https://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_lars_ic.html#sphx-glr-auto-examples-linear-model-plot-lasso-lars-ic-py**") | |
##process | |
X,y = load_dataset() | |
lasso_lars_ic = aic_pipeline(X,y) | |
n_samples = X.shape[0] | |
index_alpha_path_aic, aic_criterion = zou_et_all_aic(lasso_lars_ic) | |
index_alpha_path_bic, bic_criterion = zou_et_all_bic(lasso_lars_ic) | |
fn_assert_true() | |
with gr.Tab("AIC BIC Criteria"): | |
btn = gr.Button(value="Plot AIC BIC Criteria w Regularization") | |
btn.click(visualize_input_data, outputs= gr.Plot(label='AIC BIC Criteria') ) | |
demo.launch() |