File size: 3,016 Bytes
eae18c0 0864129 fade4ac 0864129 fade4ac 0864129 1382f7e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
from __future__ import annotations
import numpy as np
import gradio as gr
import plotly.graph_objects as go
from sklearn.datasets import load_diabetes
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import VotingRegressor
def plot_votes(preds: list[tuple[str, np.array]], markers: list[str]=None) -> go.Figure:
fig = go.Figure()
for idx, (name, pred) in enumerate(preds):
if not markers:
symbol = "diamond"
else:
symbol = markers[idx]
fig.add_trace(
go.Scatter(
y=pred,
mode="markers",
name=name,
marker=dict(symbol=symbol, size=10, line=dict(width=2, color="DarkSlateGrey"))
)
)
fig.update_layout(
title="Regressor predictions and their average",
yaxis_title="Predicted",
xaxis_title="Training Samples",
height=500,
width=1000,
xaxis=dict(showticklabels=False),
hovermode="x unified"
)
return fig
def app_fn(n: int) -> go.Figure:
X, y = load_diabetes(return_X_y=True)
# Train classifiers
reg1 = GradientBoostingRegressor(random_state=1)
reg2 = RandomForestRegressor(random_state=1)
reg3 = LinearRegression()
reg1.fit(X, y)
reg2.fit(X, y)
reg3.fit(X, y)
ereg = VotingRegressor([("gb", reg1), ("rf", reg2), ("lr", reg3)])
ereg.fit(X, y)
xt = X[:n]
pred1 = reg1.predict(xt)
pred2 = reg2.predict(xt)
pred3 = reg3.predict(xt)
pred4 = ereg.predict(xt)
preds = [
("Gradient Boosting", pred1),
("Random Forest", pred2),
("Linear Regression", pred3),
("Voting Regressor", pred4)
]
markers = ["diamond-tall", "triangle-up", "square", "star"]
fig = plot_votes(preds, markers)
return fig
title="Individual and Voting (🗳️) Regression Predictions"
with gr.Blocks() as demo:
gr.Markdown(f"# {title}")
gr.Markdown(
"""
## A voting regressor is an ensemble meta-estimator that fits several base regressors, each on the whole dataset. \
Then it averages the individual predictions to form a final prediction. This example will use three different regressors to \
predict the data: GradientBoostingRegressor, RandomForestRegressor, and LinearRegression. Then the 3 regressors will be used for the VotingRegressor. \
The dataset used consists of 10 features collected from a cohort of diabetes patients. The target is a quantitative measure of disease progression one year after baseline.
"""
)
n = gr.inputs.Slider(10, 30, 5, 20, "Number of training samples")
plot = gr.Plot(label="Individual & Voting Predictions")
button = gr.Button(label="Update Plot")
button.click(fn=app_fn, inputs=[n], outputs=[plot])
demo.load(fn=app_fn, inputs=[n], outputs=[plot])
demo.launch() |