| import numpy as np |
| import matplotlib.pyplot as plt |
| from sklearn import neighbors |
| import gradio as gr |
|
|
| def train_and_plot(weights, n_neighbors): |
| np.random.seed(0) |
| X = np.sort(5 * np.random.rand(40, 1), axis=0) |
| T = np.linspace(0, 5, 500)[:, np.newaxis] |
| y = np.sin(X).ravel() |
|
|
| |
| y[::5] += 1 * (0.5 - np.random.rand(8)) |
|
|
| knn = neighbors.KNeighborsRegressor(n_neighbors, weights=weights) |
| fit = knn.fit(X, y) |
| y_ = knn.predict(T) |
| score = knn.score(T, y_) |
|
|
| plt.figure() |
| plt.scatter(X, y, color="darkorange", label="data") |
| plt.plot(T, y_, color="navy", label="prediction") |
| plt.axis("tight") |
| plt.legend() |
| plt.title("KNeighborsRegressor (k = %i, weights = '%s')" % (n_neighbors, weights)) |
|
|
| plt.tight_layout() |
| return plt, score |
|
|
|
|
| with gr.Blocks() as demo: |
| link = "https://scikit-learn.org/stable/auto_examples/neighbors/plot_regression.html#sphx-glr-auto-examples-neighbors-plot-regression-py" |
| gr.Markdown("## Nearest Neighbors Regression") |
| gr.Markdown(f"This demo is based on this [scikit-learn example]({link}).") |
| gr.HTML("<hr>") |
| gr.Markdown("In this demo, we learn a noise-infused sine function using k-Nearest Neighbor and observe how the function learned varies as we change the following hyperparameters:") |
| gr.Markdown("""1. Weight function |
| 2. Number of neighbors""") |
| |
| with gr.Row(): |
| weights = gr.Radio(['uniform', "distance"], label="Weights", info="Choose the weight function") |
| n_neighbors = gr.Slider(label="Neighbors", info="Choose the number of neighbors", minimum =1, maximum=15, step=1) |
| |
| |
| with gr.Row(): |
| with gr.Column(scale=2): |
| plot = gr.Plot(label="KNeighborsRegressor Plot") |
| with gr.Column(scale=1): |
| num = gr.Textbox(label="Test Accuracy") |
|
|
| |
| weights.change(train_and_plot, inputs=[weights, n_neighbors], outputs=[plot, num]) |
| n_neighbors.change(train_and_plot, inputs=[weights, n_neighbors], outputs=[plot, num]) |
| |
|
|
| if __name__ == "__main__": |
| demo.launch() |