titanic / app.py
frnka's picture
changing model name
9d42704
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_new", version=1)
model_dir = model.download()
model = joblib.load(model_dir + "/titanic_new_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):
# Model input:
# Pclass, Sex, Age, SibSp, Parch, Fare, Embarked, Deck,
# Title, Age_Class, Relatives, Not_alone, Fare_Per_Person
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' is a list of predictions returned as the label.
res = model.predict(np.asarray(input_list).reshape(1, -1))
# We add '[0]' to the result of the transformed 'res', because 'res' is a list, and we only want
# the first element.
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")