anyonehomep1mane
Initial Changes
d7e53e8
import gradio as gr
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import (
accuracy_score,
mean_absolute_error,
mean_squared_error,
r2_score,
)
import numpy as np
# ======================
# Model imports
# ======================
from sklearn.linear_model import (
LinearRegression,
LogisticRegression,
Perceptron,
)
from sklearn.neighbors import (
KNeighborsClassifier,
KNeighborsRegressor,
)
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import (
DecisionTreeClassifier,
DecisionTreeRegressor,
)
from sklearn.svm import SVC, SVR
from sklearn.neural_network import (
MLPClassifier,
MLPRegressor,
)
# ======================
# Model registry
# ======================
REGRESSION_MODELS = {
"Linear Regression": LinearRegression,
"KNN Regressor": KNeighborsRegressor,
"Decision Tree Regressor": DecisionTreeRegressor,
"SVR": SVR,
"MLP Regressor": MLPRegressor,
}
CLASSIFICATION_MODELS = {
"Logistic Regression": LogisticRegression,
"KNN Classifier": KNeighborsClassifier,
"Naive Bayes": GaussianNB,
"Perceptron": Perceptron,
"Decision Tree Classifier": DecisionTreeClassifier,
"SVM Classifier": SVC,
"MLP Classifier": MLPClassifier,
}
# ======================
# UI Logic
# ======================
def update_models(task_type):
if task_type == "Regression":
return gr.update(choices=list(REGRESSION_MODELS.keys()), value=None)
return gr.update(choices=list(CLASSIFICATION_MODELS.keys()), value=None)
def train_model(file, task_type, model_name):
df = pd.read_csv(file.name)
# Assumption: last column is target
X = df.iloc[:, :-1]
y = df.iloc[:, -1]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
if task_type == "Regression":
model = REGRESSION_MODELS[model_name]()
model.fit(X_train, y_train)
preds = model.predict(X_test)
mae = mean_absolute_error(y_test, preds)
mse = mean_squared_error(y_test, preds)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, preds)
return (
f"Model: {model_name}\n"
f"Task: Regression\n"
f"MAE: {mae:.4f}\n"
f"MSE: {mse:.4f}\n"
f"RMSE: {rmse:.4f}\n"
f"R² Score: {r2:.4f}"
)
else:
model = CLASSIFICATION_MODELS[model_name]()
model.fit(X_train, y_train)
preds = model.predict(X_test)
acc = accuracy_score(y_test, preds)
return (
f"Model: {model_name}\n"
f"Task: Classification\n"
f"Accuracy: {acc:.4f}"
)
# ======================
# Gradio App
# ======================
with gr.Blocks() as demo:
gr.Markdown("## Supervised Learning Model Trainer")
gr.Markdown(
"Upload a CSV file. The **last column is treated as target**."
)
file_input = gr.File(label="Upload CSV", file_types=[".csv"])
task_dropdown = gr.Dropdown(
["Regression", "Classification"],
label="Task Type",
)
model_dropdown = gr.Dropdown(label="Model")
output = gr.Textbox(label="Result", lines=5)
train_btn = gr.Button("Generate")
task_dropdown.change(
update_models,
inputs=task_dropdown,
outputs=model_dropdown,
)
train_btn.click(
train_model,
inputs=[file_input, task_dropdown, model_dropdown],
outputs=output,
)
demo.launch()