Jayabalambika's picture
Create app.py
f532f8a
raw
history blame
3.41 kB
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()