import gradio as gr import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import plotly.express as px # --- Generate synthetic data --- def train_and_visualize(seed, samples): np.random.seed(seed) # Generate data X = np.random.randn(samples, 2) y = (X[:, 0] + X[:, 1] > 0).astype(int) # Train/test split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # Train model model = LogisticRegression() model.fit(X_train, y_train) # Evaluate preds = model.predict(X_test) acc = accuracy_score(y_test, preds) # Visualization fig = px.scatter( x=X[:, 0], y=X[:, 1], color=y.astype(str), title="Synthetic Data Distribution", labels={"x": "Feature 1", "y": "Feature 2", "color": "Label"}, opacity=0.8 ) fig.update_layout(template="plotly_dark", width=600, height=500) return f"Accuracy: {acc:.3f}\nCoefficients: {model.coef_}\nIntercept: {model.intercept_}", fig # --- UI Layout --- with gr.Blocks() as demo: gr.Markdown(""" # 🌟 Logistic Regression Demo (Synthetic Data) Explore how logistic regression behaves on randomly generated 2-D data. Adjust the **seed** and **sample size** to see different patterns. """) with gr.Row(): seed = gr.Slider(0, 999, value=42, label="Random Seed") samples = gr.Slider(50, 500, value=100, step=10, label="Number of Samples") run_btn = gr.Button("Run Logistic Regression", variant="primary") result = gr.Textbox(label="Model Output", lines=4) plot = gr.Plot(label="Data Visualization") run_btn.click(train_and_visualize, inputs=[seed, samples], outputs=[result, plot]) # For HF Spaces if __name__ == "__main__": demo.launch()