Spaces:
Sleeping
Sleeping
import pandas as pd | |
import numpy as np | |
import gradio as gr | |
from sklearn.model_selection import train_test_split | |
from sklearn.linear_model import LogisticRegression | |
from sklearn.neural_network import MLPClassifier | |
from sklearn.metrics import accuracy_score, classification_report | |
import matplotlib.pyplot as plt | |
# Loading the dataset | |
df = pd.read_csv('assignment-2-k2461469.csv') | |
# Splitting the data into features and target variable | |
X = df[["dirty", "wait", "lastyear", "usa"]] | |
y = df["good"] | |
# Splitting the dataset into training and test sets | |
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) | |
# Creating and fitting the logistic regression model | |
logreg_model = LogisticRegression() | |
logreg_model.fit(X_train, y_train) | |
# Creating and fitting the neural network model | |
nn_model = MLPClassifier(random_state=42) | |
nn_model.fit(X_train, y_train) | |
# Function to make predictions and display them on a graph (Logistic Regression) | |
def predict_and_plot_logreg(dirty, wait, lastyear, usa): | |
input_data = np.array([[dirty, wait, lastyear, usa]]) | |
predicted_value = logreg_model.predict(input_data)[0] | |
y_pred = logreg_model.predict(X_test) | |
plt.figure(figsize=(12, 6)) | |
# Dirty vs Good plot | |
plt.subplot(1, 2, 1) | |
plt.scatter(X_test.iloc[:, 0], y_test, color='blue', alpha=0.6, label='Actual Good Values') # X_test.iloc[:, 0] corresponds to 'dirty' | |
plt.scatter(dirty, predicted_value, color='red', label=f'Input: Dirty={dirty}, Predicted Good={predicted_value:.2f}', zorder=5) | |
plt.title('Dirty vs Good') | |
plt.xlabel('Dirty') | |
plt.ylabel('Good') | |
plt.legend() | |
plt.grid(True) | |
# Wait vs Good plot | |
plt.subplot(1, 2, 2) | |
plt.scatter(X_test.iloc[:, 1], y_test, color='blue', alpha=0.6, label='Actual Good Values') | |
plt.scatter(wait, predicted_value, color='red', label=f'Input: Wait={wait}, Predicted Good={predicted_value:.2f}', zorder=5) | |
plt.title('Wait vs Good') | |
plt.xlabel('Wait') | |
plt.ylabel('Good') | |
plt.legend() | |
plt.grid(True) | |
plt.tight_layout() | |
plt.savefig('output_plot_logreg.png') | |
plt.close() | |
return predicted_value, 'output_plot_logreg.png' | |
# Function to make predictions and display them on a graph (Neural Network) | |
def predict_and_plot_nn(dirty, wait, lastyear, usa): | |
input_data = np.array([[dirty, wait, lastyear, usa]]) | |
predicted_value = nn_model.predict(input_data)[0] | |
y_pred = nn_model.predict(X_test) | |
plt.figure(figsize=(12, 6)) | |
# Dirty vs Good plot | |
plt.subplot(1, 2, 1) | |
plt.scatter(X_test.iloc[:, 0], y_test, color='blue', alpha=0.6, label='Actual Good Values') # X_test.iloc[:, 0] corresponds to 'dirty' | |
plt.scatter(dirty, predicted_value, color='red', label=f'Input: Dirty={dirty}, Predicted Good={predicted_value:.2f}', zorder=5) | |
plt.title('Dirty vs Good (NN)') | |
plt.xlabel('Dirty') | |
plt.ylabel('Good') | |
plt.legend() | |
plt.grid(True) | |
# Wait vs Good plot | |
plt.subplot(1, 2, 2) | |
plt.scatter(X_test.iloc[:, 1], y_test, color='blue', alpha=0.6, label='Actual Good Values') | |
plt.scatter(wait, predicted_value, color='red', label=f'Input: Wait={wait}, Predicted Good={predicted_value:.2f}', zorder=5) | |
plt.title('Wait vs Good (NN)') | |
plt.xlabel('Wait') | |
plt.ylabel('Good') | |
plt.legend() | |
plt.grid(True) | |
plt.tight_layout() | |
plt.savefig('output_plot_nn.png') | |
plt.close() | |
return predicted_value, 'output_plot_nn.png' | |
# Creating Gradio UI with two tabs for Logistic Regression and Neural Network | |
with gr.Blocks() as demo: | |
gr.Markdown("# Prediction Models") | |
with gr.Tab("Logistic Regression"): | |
gr.Markdown("### Logistic Regression Prediction") | |
with gr.Row(): | |
dirty_slider = gr.Slider(minimum=0, maximum=6, step=0.01, label="Dirty") | |
wait_slider = gr.Slider(minimum=0, maximum=5.3, step=0.01, label="Wait") | |
lastyear_slider = gr.Slider(minimum=0, maximum=70, step=0.01, label="Last Year") | |
usa_slider = gr.Slider(minimum=0, maximum=1, step=0.01, label="USA") | |
predict_button_logreg = gr.Button("Predict") | |
predicted_value_output_logreg = gr.Textbox(label="Predicted Value (Logistic Regression)") | |
plot_output_logreg = gr.Image(label="Actual vs Predicted Graph (Logistic Regression)") | |
predict_button_logreg.click( | |
fn=predict_and_plot_logreg, | |
inputs=[dirty_slider, wait_slider, lastyear_slider, usa_slider], | |
outputs=[predicted_value_output_logreg, plot_output_logreg] | |
) | |
with gr.Tab("Neural Network"): | |
gr.Markdown("### Neural Network Prediction") | |
with gr.Row(): | |
dirty_slider_nn = gr.Slider(minimum=0, maximum=6, step=0.01, label="Dirty") | |
wait_slider_nn = gr.Slider(minimum=0, maximum=5.3, step=0.01, label="Wait") | |
lastyear_slider_nn = gr.Slider(minimum=0, maximum=70, step=0.01, label="Last Year") | |
usa_slider_nn = gr.Slider(minimum=0, maximum=1, step=0.01, label="USA") | |
predict_button_nn = gr.Button("Predict") | |
predicted_value_output_nn = gr.Textbox(label="Predicted Value (Neural Network)") | |
plot_output_nn = gr.Image(label="Actual vs Predicted Graph (Neural Network)") | |
predict_button_nn.click( | |
fn=predict_and_plot_nn, | |
inputs=[dirty_slider_nn, wait_slider_nn, lastyear_slider_nn, usa_slider_nn], | |
outputs=[predicted_value_output_nn, plot_output_nn] | |
) | |
demo.launch() | |