|
import gradio as gr |
|
import numpy as np |
|
from PIL import Image |
|
import requests |
|
import re |
|
|
|
import hopsworks |
|
import joblib |
|
from consts import * |
|
|
|
project = hopsworks.login() |
|
fs = project.get_feature_store() |
|
|
|
mr = project.get_model_registry() |
|
model = mr.get_model("titanic", version=2) |
|
model_dir = model.download() |
|
model = joblib.load(model_dir + "/titanic_model.pkl") |
|
|
|
|
|
def get_deck(cabin): |
|
if cabin is None: |
|
return 0 |
|
deck = re.compile("([a-zA-Z]+)").search(cabin) |
|
if deck is not None: |
|
deck = deck.group() |
|
if deck in DECK: |
|
deck = DECK[deck] |
|
else: |
|
deck = 0 |
|
return deck |
|
|
|
|
|
def get_sex(sex): |
|
return GENDERS[sex] |
|
|
|
|
|
def get_embarked(embarked): |
|
return PORTS[embarked] |
|
|
|
|
|
def get_title(title): |
|
if title in TITLES_RARE: |
|
title = "Rare" |
|
if title not in TITLES: |
|
return 0 |
|
return TITLES[title] |
|
|
|
|
|
def get_age_class(age, p_class): |
|
return age * p_class |
|
|
|
|
|
def get_relatives(sib_sp, parch): |
|
return sib_sp + parch |
|
|
|
|
|
def get_not_alone(relatives): |
|
return 1 if relatives > 0 else 0 |
|
|
|
|
|
def get_fare_per_person(fare, relatives): |
|
return fare / (relatives + 1) |
|
|
|
|
|
def titanic(p_class, sex, age, sib_sp, parch, fare, cabin, embarked, title): |
|
|
|
|
|
|
|
p_class = p_class + 1 |
|
deck = get_deck(cabin) |
|
sex = get_sex(sex) |
|
embarked = get_embarked(embarked) |
|
title = get_title(title) |
|
age_class = get_age_class(age, p_class) |
|
relatives = get_relatives(sib_sp, parch) |
|
not_alone = get_not_alone(relatives) |
|
fare_per_person = get_fare_per_person(fare, relatives) |
|
input_list = [p_class, sex, age, sib_sp, parch, fare, embarked, |
|
deck, title, age_class, relatives, not_alone, fare_per_person] |
|
|
|
res = model.predict(np.asarray(input_list).reshape(1, -1)) |
|
|
|
|
|
img_name = "alive.png" if res[0] == 1 else "dead.png" |
|
img = Image.open(img_name) |
|
return img |
|
|
|
|
|
demo = gr.Interface( |
|
fn=titanic, |
|
title="Titanic survival predictor", |
|
description="Experiment with the parameters to predict if the person would or would not survive.", |
|
allow_flagging="never", |
|
inputs=[ |
|
gr.inputs.Dropdown(choices=["Class 1", "Class 2", "Class 3"], type="index", label="Class", default="Class 1"), |
|
gr.inputs.Dropdown(choices=["male", "female"], type="value", label="Gender", default="male"), |
|
gr.inputs.Number(label="Age"), |
|
gr.inputs.Number(default=0, label="Number of sibling and spouses on board"), |
|
gr.inputs.Number(default=0, label="Number of children/parents on board"), |
|
gr.inputs.Number(label="Fare"), |
|
gr.inputs.Textbox(label="Cabin"), |
|
gr.inputs.Dropdown(choices=['S', 'C', 'Q'], label="Port of embarkation", default="S"), |
|
gr.inputs.Textbox(label="Title") |
|
], |
|
outputs=gr.Image(type="pil")) |
|
|
|
demo.launch() |
|
|
|
titanic(1, "male", 22, 1, 0, 150, "C85", "S", "Mr") |
|
|