| 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(max_depth,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=max_depth), 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="Decision tree (max_depth=4)", linewidth=2) | |
| ax.plot(X, y_2, color=colors[2], label=f"Adaboost (max_depth={max_depth}, 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 bosting of decision tree regressor using Adaboost") | |
| max_depth = gr.Slider(minimum=1, maximum=50, step=1, label = "Maximum Depth") | |
| n_estimators = gr.Slider(minimum=1, maximum=300, step=1, label = "Number of Estimators") | |
| plot = gr.Plot(label=title) | |
| n_estimators.change(fn=train_estimators, inputs=[max_depth,n_estimators], outputs=[plot]) | |
| max_depth.change(fn=train_estimators, inputs=[max_depth,n_estimators], outputs=[plot]) | |
| demo.launch() | |