File size: 1,596 Bytes
c1847f1 5733fc0 | 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 | import gradio as gr
import joblib
import pandas as pd
# Load pipeline components
scaler, pca, clf = joblib.load("tennis_model.pkl")
# All possible categorical values (must match training one-hot encoding)
outlook_options = ["Sunny", "Overcast", "Rain"]
temp_options = ["Hot", "Mild", "Cool"]
humidity_options = ["High", "Normal"]
wind_options = ["Weak", "Strong"]
def predict_play(outlook, temp, humidity, wind):
# Build input row
data = pd.DataFrame([[outlook, temp, humidity, wind]],
columns=["outlook", "temp", "humidity", "wind"])
# One-hot encode to match training
data_enc = pd.get_dummies(data)
# Ensure all training columns exist
for col in scaler.feature_names_in_:
if col not in data_enc:
data_enc[col] = 0
data_enc = data_enc[scaler.feature_names_in_] # reorder
# Scale + PCA + Predict
X_scaled = scaler.transform(data_enc)
X_pca = pca.transform(X_scaled)
pred = clf.predict(X_pca)[0]
return f"Prediction: {pred}"
# Gradio UI
with gr.Blocks() as demo:
gr.Markdown("# 🎾 Play Tennis Predictor")
outlook = gr.Dropdown(outlook_options, label="Outlook")
temp = gr.Dropdown(temp_options, label="Temperature")
humidity = gr.Dropdown(humidity_options, label="Humidity")
wind = gr.Dropdown(wind_options, label="Wind")
btn = gr.Button("Predict")
output = gr.Textbox(label="Result")
btn.click(fn=predict_play, inputs=[outlook, temp, humidity, wind], outputs=output)
demo.launch(server_name="0.0.0.0",server_port=7860,debug=True) |