Mohammad Haizad
initial commit
d8e0581
raw
history blame
2.44 kB
import gradio as gr
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.linear_model import RidgeCV
from sklearn.feature_selection import SelectFromModel
from time import time
from sklearn.feature_selection import SequentialFeatureSelector
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
def select_features(method,num_features):
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
ridge = RidgeCV(alphas=np.logspace(-6, 6, num=5)).fit(X, y)
feature_names = np.array(diabetes.feature_names)
if method == 'model':
importance = np.abs(ridge.coef_)
threshold = np.sort(importance)[-3] + 0.01
tic = time()
sfm = SelectFromModel(ridge, threshold=threshold).fit(X, y)
toc = time()
selected_features = feature_names[sfm.get_support()]
if int(num_features) < len(selected_features):
selected_features = selected_features[:int(num_features)]
execution_time = toc - tic
elif method == 'sfs-forward':
tic_fwd = time()
sfs_forward = SequentialFeatureSelector(
ridge, n_features_to_select=int(num_features), direction="forward"
).fit(X, y)
toc_fwd = time()
selected_features = feature_names[sfs_forward.get_support()]
execution_time = toc_fwd - tic_fwd
elif method == 'sfs-backward':
tic_bwd = time()
sfs_backward = SequentialFeatureSelector(
ridge, n_features_to_select=int(num_features), direction="backward"
).fit(X, y)
toc_bwd = time()
selected_features = feature_names[sfs_backward.get_support()]
execution_time = toc_bwd - tic_bwd
return f"Selected the following features: {selected_features} in {execution_time:.3f} seconds"
title = "Selecting features with Sequential Feature Selection"
with gr.Blocks(title=title) as demo:
gr.Markdown(f"## {title}")
gr.Markdown("This app demonstrates feature selection techniques using model based selection and sequential feature selection. The app uses the diabetes dataset from sklearn")
method = gr.Radio(["model", "sfs-forward", "sfs-backward"], label="Method")
num_features = gr.Textbox(label="Number of features")
output = gr.Textbox(label="Output Box")
select_btn = gr.Button("Select")
select_btn.click(fn=select_features, inputs=[method,num_features], outputs=output)
demo.launch()