haizad's picture
fix extra vars error
509d119
import gradio as gr
import numpy as np
from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeRegressor
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import seaborn as sns
def train_estimators(n_estimators):
rng = np.random.RandomState(1)
X = np.linspace(0, 6, 100)[:, np.newaxis]
y = np.sin(X).ravel() + np.sin(6 * X).ravel() + rng.normal(0, 0.1, X.shape[0])
regr_1 = DecisionTreeRegressor(max_depth=4)
regr_2 = AdaBoostRegressor(
DecisionTreeRegressor(max_depth=4), n_estimators=n_estimators, random_state=rng
)
regr_1.fit(X, y)
regr_2.fit(X, y)
y_1 = regr_1.predict(X)
y_2 = regr_2.predict(X)
colors = sns.color_palette("colorblind")
fig, ax = plt.subplots()
ax.scatter(X, y, color=colors[0], label="training samples")
ax.plot(X, y_1, color=colors[1], label=f"Decision tree (estimators=1)", linewidth=2)
ax.plot(X, y_2, color=colors[2], label=f"Adaboost (estimators={n_estimators})", linewidth=2)
ax.set_xlabel("data")
ax.set_ylabel("target")
ax.legend()
return fig
title = "Decision Tree Regression with AdaBoost"
with gr.Blocks(title=title) as demo:
gr.Markdown(f"## {title}")
gr.Markdown("""
This app demonstrates boosting of decision tree regressor using Adaboost. Boosting algorithms work by combining multiple models (weak learners) to reach the final output (strong learners).
A single decision tree trained on randomly generated regression dataset is used as baseline and compared with a boosted decision tree trained on the same dataset.
The outputs of each model are visualize together with actual data in the plot
The number of estimator used in boosted decision tree can be adjusted and the effect of this adjusment can be seen in the resulting plot.
This app is developed based on [scikit-learn example](https://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_regression.html#sphx-glr-auto-examples-ensemble-plot-adaboost-regression-py)
""")
n_estimators = gr.Slider(minimum=2, maximum=300, step=1, label = "Number of Estimators")
plot = gr.Plot(label=title)
n_estimators.change(fn=train_estimators, inputs=n_estimators, outputs=[plot])
demo.launch()