titanic / app.py
frnka's picture
changing model name
9d42704
raw
history blame contribute delete
No virus
3.17 kB
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")