|
|
|
|
|
|
|
import gradio as gr |
|
import matplotlib.pyplot as plt |
|
|
|
from sklearn.cluster import kmeans_plusplus |
|
from sklearn.datasets import make_blobs |
|
|
|
plt.switch_backend("agg") |
|
|
|
def initial_points(n_samples, n_components, clst_std, n_clust): |
|
plt.clf() |
|
|
|
|
|
X, y_true = make_blobs( |
|
n_samples=n_samples, centers=n_components, cluster_std=clst_std, random_state=0 |
|
) |
|
X = X[:, ::-1] |
|
|
|
|
|
centers_init, indices = kmeans_plusplus(X, n_clusters=n_clust, random_state=0) |
|
|
|
|
|
plt.figure(1) |
|
|
|
for k in range(n_components): |
|
cluster_data = y_true == k |
|
plt.scatter(X[cluster_data, 0], X[cluster_data, 1], marker=".", s=10) |
|
|
|
plt.scatter(centers_init[:, 0], centers_init[:, 1], c="b", s=50) |
|
plt.title("K-Means++ Initialization") |
|
plt.xticks([]) |
|
plt.yticks([]) |
|
return plt |
|
|
|
title = "An example of K-Means++ Initialization" |
|
with gr.Blocks() as demo: |
|
gr.Markdown(f" # {title}") |
|
gr.Markdown(""" |
|
This example shows the ouput of the K-Means++ function. |
|
|
|
This is based on the example [here](https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_plusplus.html#sphx-glr-auto-examples-cluster-plot-kmeans-plusplus-py). |
|
""") |
|
with gr.Row(): |
|
with gr.Column(): |
|
n_samples = gr.Slider(100, 4000, 1000, label="Number of Samples") |
|
n_components = gr.Slider(1, 10, 4, step=1, label="Number of blobs") |
|
clst_std = gr.Slider(.1, 1, .6, label="Blob Standard Deviation") |
|
n_clusters = gr.Slider(1, 10, 4, step=1, label="Number of Clusters to Initialize") |
|
btn = gr.Button(label="Run") |
|
with gr.Column(): |
|
graph_points = gr.Plot(label="K-Means++ Initial Points") |
|
btn.click( |
|
fn=initial_points, |
|
inputs=[n_samples, n_components, clst_std, n_clusters], |
|
outputs=[graph_points] |
|
) |
|
|
|
if __name__ == '__main__': |
|
demo.launch() |
|
|
|
|