Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| import pickle | |
| import pandas as pd | |
| from sklearn.preprocessing import StandardScaler | |
| from sklearn.linear_model import LogisticRegression, Perceptron | |
| from sklearn.model_selection import train_test_split | |
| from sklearn.metrics import accuracy_score | |
| def load_or_train_models(): | |
| """Load models from disk or train and save them if not found.""" | |
| try: | |
| with open("scaler.pkl", "rb") as f: | |
| scaler = pickle.load(f) | |
| with open("logistic_regression.pkl", "rb") as f: | |
| logistic_regression = pickle.load(f) | |
| with open("perceptron.pkl", "rb") as f: | |
| perceptron = pickle.load(f) | |
| except FileNotFoundError: | |
| print("Training models...") | |
| df = pd.read_excel("Student-Employability-Datasets.xlsx", sheet_name="Data") | |
| X = df.iloc[:, 1:-2].values | |
| y = (df["CLASS"] == "Employable").astype(int) | |
| X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) | |
| scaler = StandardScaler() | |
| X_train_scaled = scaler.fit_transform(X_train) | |
| X_test_scaled = scaler.transform(X_test) | |
| logistic_regression = LogisticRegression(random_state=42) | |
| logistic_regression.fit(X_train_scaled, y_train) | |
| perceptron = Perceptron(random_state=42) | |
| perceptron.fit(X_train_scaled, y_train) | |
| with open("scaler.pkl", "wb") as f: | |
| pickle.dump(scaler, f) | |
| with open("logistic_regression.pkl", "wb") as f: | |
| pickle.dump(logistic_regression, f) | |
| with open("perceptron.pkl", "wb") as f: | |
| pickle.dump(perceptron, f) | |
| return scaler, logistic_regression, perceptron | |
| scaler, logistic_regression, perceptron = load_or_train_models() | |
| def predict_employability(name, ga, mos, pc, ma, sc, api, cs, model_choice): | |
| """Predict employability based on input features and selected model.""" | |
| name = name if name else "The candidate" | |
| input_data = np.array([[ga, mos, pc, ma, sc, api, cs]]) | |
| input_scaled = scaler.transform(input_data) | |
| model = logistic_regression if model_choice == "Logistic Regression" else perceptron | |
| prediction = model.predict(input_scaled)[0] | |
| return f"{name} is {'Employable π' if prediction == 1 else 'Less Employable - Work Hard! πͺ'}" | |
| with gr.Blocks() as app: | |
| gr.Markdown("# Employability Evaluation ") | |
| with gr.Row(): | |
| with gr.Column(): | |
| name = gr.Textbox(label="Name") | |
| sliders = [ | |
| gr.Slider(1, 5, step=1, label=label) for label in [ | |
| "General Appearance", "Manner of Speaking", "Physical Condition", | |
| "Mental Alertness", "Self Confidence", "Ability to Present Ideas", | |
| "Communication Skills" | |
| ] | |
| ] | |
| model_choice = gr.Radio(["Logistic Regression", "Perceptron"], label="Select Model") | |
| predict_btn = gr.Button("Get Evaluation") | |
| with gr.Column(): | |
| result_output = gr.Textbox(label="Employability Prediction") | |
| predict_btn.click( | |
| fn=predict_employability, | |
| inputs=[name] + sliders + [model_choice], | |
| outputs=[result_output] | |
| ) | |
| app.launch(share=True) |