|
|
|
|
|
import joblib |
|
import numpy as np |
|
import gradio as gr |
|
import os |
|
|
|
resources_dir = "resources" |
|
normalizers_dir = "normalizers" |
|
algorithms_dir = "algorithms" |
|
|
|
|
|
def master_fn(year, operator, location, ac_type, passengers, crew, algorithm): |
|
def ac_type_normalizer(value): |
|
hasher = joblib.load(os.path.join(resources_dir, normalizers_dir, "ac_type_hash_model.joblib")) |
|
return hasher.transform([[value]]).toarray().flatten() |
|
|
|
def location_normalizer(value): |
|
hasher = joblib.load(os.path.join(resources_dir, normalizers_dir, "location_hash_model.joblib")) |
|
return hasher.transform([[value]]).toarray().flatten() |
|
|
|
def operator_normalizer(value): |
|
hasher = joblib.load(os.path.join(resources_dir, normalizers_dir, "operator_hash_model.joblib")) |
|
return hasher.transform([[value]]).toarray().flatten() |
|
|
|
def year_normalizer(value): |
|
kbins_discretizer = joblib.load(os.path.join(resources_dir, normalizers_dir, "year_qbins_model.joblib")) |
|
return kbins_discretizer.transform([[value]]).flatten() |
|
|
|
def passenger_crew_normalizer(value1, value2): |
|
scaler = joblib.load(os.path.join(resources_dir, normalizers_dir, "passenger_crew_scaler_model.joblib")) |
|
return scaler.transform([[value1, value2]])[0] |
|
|
|
observation = np.concatenate((year_normalizer(year), operator_normalizer(operator), location_normalizer(location), |
|
ac_type_normalizer(ac_type), passenger_crew_normalizer(passengers, crew))) |
|
|
|
result = float |
|
|
|
if algorithm == "SVR": |
|
svr = joblib.load(os.path.join(resources_dir, algorithms_dir, "svr_model.joblib")) |
|
result = svr.predict([observation])[0] |
|
elif algorithm == "KNN": |
|
knn = joblib.load(os.path.join(resources_dir, algorithms_dir, "knn_model.joblib")) |
|
result = knn.predict([observation])[0] |
|
elif algorithm == "Isolation Forest": |
|
random_forest = joblib.load(os.path.join(resources_dir, algorithms_dir, "random_forest_model.joblib")) |
|
result = random_forest.predict([observation])[0] |
|
else: |
|
raise ValueError('Unknown algorithm: {}'.format(algorithm)) |
|
|
|
return round(result, 2) |
|
|
|
|
|
demo = gr.Interface( |
|
master_fn, |
|
[ |
|
"number", |
|
"text", |
|
"text", |
|
"text", |
|
"number", |
|
"number", |
|
gr.Radio(["KNN", "Isolation Forest", "SVR"]) |
|
], |
|
"number", |
|
title="Flight Crash Fatality Prediction", |
|
description="Enter the flight details and the algorithm to perform the prediction. Note that the purpose of this " |
|
"effort is strictly to showcase the strengths and weaknesses amongst the 3 techniques used, " |
|
"and by no means claims any sort of accuracy in its predictions.", |
|
) |
|
|
|
if __name__ == "__main__": |
|
demo.launch(show_api=False) |
|
|