File size: 3,292 Bytes
08aeab9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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)