Spaces:
Build error
Build error
Mohammad Haizad
commited on
Commit
·
d8e0581
1
Parent(s):
d865696
initial commit
Browse files- README.md +2 -2
- app.py +57 -0
- requirements.txt +2 -0
README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
| 1 |
---
|
| 2 |
-
title: Model
|
| 3 |
emoji: 🔥
|
| 4 |
colorFrom: blue
|
| 5 |
colorTo: gray
|
| 6 |
sdk: gradio
|
| 7 |
-
sdk_version: 3.
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
license: mit
|
|
|
|
| 1 |
---
|
| 2 |
+
title: Model-based And Sequential Feature Selection
|
| 3 |
emoji: 🔥
|
| 4 |
colorFrom: blue
|
| 5 |
colorTo: gray
|
| 6 |
sdk: gradio
|
| 7 |
+
sdk_version: 3.27.0
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
license: mit
|
app.py
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
import numpy as np
|
| 3 |
+
from sklearn.datasets import load_diabetes
|
| 4 |
+
from sklearn.linear_model import RidgeCV
|
| 5 |
+
from sklearn.feature_selection import SelectFromModel
|
| 6 |
+
from time import time
|
| 7 |
+
from sklearn.feature_selection import SequentialFeatureSelector
|
| 8 |
+
import matplotlib
|
| 9 |
+
matplotlib.use("Agg")
|
| 10 |
+
import matplotlib.pyplot as plt
|
| 11 |
+
|
| 12 |
+
def select_features(method,num_features):
|
| 13 |
+
diabetes = load_diabetes()
|
| 14 |
+
X, y = diabetes.data, diabetes.target
|
| 15 |
+
ridge = RidgeCV(alphas=np.logspace(-6, 6, num=5)).fit(X, y)
|
| 16 |
+
feature_names = np.array(diabetes.feature_names)
|
| 17 |
+
if method == 'model':
|
| 18 |
+
importance = np.abs(ridge.coef_)
|
| 19 |
+
threshold = np.sort(importance)[-3] + 0.01
|
| 20 |
+
tic = time()
|
| 21 |
+
sfm = SelectFromModel(ridge, threshold=threshold).fit(X, y)
|
| 22 |
+
toc = time()
|
| 23 |
+
selected_features = feature_names[sfm.get_support()]
|
| 24 |
+
if int(num_features) < len(selected_features):
|
| 25 |
+
selected_features = selected_features[:int(num_features)]
|
| 26 |
+
execution_time = toc - tic
|
| 27 |
+
elif method == 'sfs-forward':
|
| 28 |
+
tic_fwd = time()
|
| 29 |
+
sfs_forward = SequentialFeatureSelector(
|
| 30 |
+
ridge, n_features_to_select=int(num_features), direction="forward"
|
| 31 |
+
).fit(X, y)
|
| 32 |
+
toc_fwd = time()
|
| 33 |
+
selected_features = feature_names[sfs_forward.get_support()]
|
| 34 |
+
execution_time = toc_fwd - tic_fwd
|
| 35 |
+
elif method == 'sfs-backward':
|
| 36 |
+
tic_bwd = time()
|
| 37 |
+
sfs_backward = SequentialFeatureSelector(
|
| 38 |
+
ridge, n_features_to_select=int(num_features), direction="backward"
|
| 39 |
+
).fit(X, y)
|
| 40 |
+
toc_bwd = time()
|
| 41 |
+
selected_features = feature_names[sfs_backward.get_support()]
|
| 42 |
+
execution_time = toc_bwd - tic_bwd
|
| 43 |
+
return f"Selected the following features: {selected_features} in {execution_time:.3f} seconds"
|
| 44 |
+
|
| 45 |
+
title = "Selecting features with Sequential Feature Selection"
|
| 46 |
+
with gr.Blocks(title=title) as demo:
|
| 47 |
+
gr.Markdown(f"## {title}")
|
| 48 |
+
gr.Markdown("This app demonstrates feature selection techniques using model based selection and sequential feature selection. The app uses the diabetes dataset from sklearn")
|
| 49 |
+
|
| 50 |
+
method = gr.Radio(["model", "sfs-forward", "sfs-backward"], label="Method")
|
| 51 |
+
num_features = gr.Textbox(label="Number of features")
|
| 52 |
+
output = gr.Textbox(label="Output Box")
|
| 53 |
+
select_btn = gr.Button("Select")
|
| 54 |
+
select_btn.click(fn=select_features, inputs=[method,num_features], outputs=output)
|
| 55 |
+
|
| 56 |
+
demo.launch()
|
| 57 |
+
|
requirements.txt
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
scikit-learn==1.2.2
|
| 2 |
+
matplotlib==3.7.1
|