| | 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 |
| |
|
| | |
| | |
| | |
| | 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, |
| | ) |
| |
|
| | |
| | |
| | |
| | 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, |
| | } |
| |
|
| | |
| | |
| | |
| | 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) |
| |
|
| | |
| | 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}" |
| | ) |
| |
|
| |
|
| | |
| | |
| | |
| | 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() |