Spaces:
Runtime error
Runtime error
import gradio as gr | |
from PIL import Image | |
import hopsworks | |
import pandas as pd | |
import joblib | |
project = hopsworks.login() | |
fs = project.get_feature_store() | |
dataset_api = project.get_dataset_api() | |
dataset_api.download("Resources/images/wine/df_recent.png") | |
dataset_api.download("Resources/images/wine/confusion_matrix.png") | |
#split one column as targets | |
def feature_target_split(df, column_name): | |
features = df.drop(column_name, axis=1).reset_index(drop=True) | |
targets = df[column_name].reset_index(drop=True) | |
return features, targets | |
# One-hot encode the categorical feature | |
def one_hot_encoder(df, column_name): | |
import pandas as pd | |
from sklearn.preprocessing import OneHotEncoder | |
encoder = OneHotEncoder(drop='first',sparse=False) | |
encoded_features = encoder.fit_transform(df[[column_name]]) | |
encoded_df = pd.DataFrame(encoded_features, columns=encoder.get_feature_names_out([column_name])) | |
encoded_df = pd.concat([df.drop(column_name, axis=1), encoded_df], axis=1) | |
return encoded_df | |
def find_thresholds(train, test, column_name): | |
import pandas as pd | |
df = pd.concat([train, test], axis=0) | |
column_list = list(df[column_name]) | |
column_list.sort() | |
lower_threshold_idx = int(len(column_list)/3) | |
upper_threshold_idx = lower_threshold_idx * 2 | |
lower_threshold = column_list[lower_threshold_idx] | |
upper_threshold = column_list[upper_threshold_idx] | |
return lower_threshold, upper_threshold | |
def quality2class(series, lower_threshold, upper_threshold): | |
import pandas as pd | |
quality_list = list(series) | |
class_list = [] | |
for i in range(len(quality_list)): | |
if quality_list[i] < lower_threshold: | |
class_list.append('poor') | |
elif quality_list[i] > upper_threshold: | |
class_list.append('excellent') | |
else: | |
class_list.append('fair') | |
class_series= pd.Series(class_list, name = 'class') | |
return class_series | |
# Read the latest wine added to the feature store | |
wine_fg = fs.get_feature_group(name="wine", version=1) | |
wine_df = wine_fg.read(read_options={"use_hive": True}) | |
latest_wine_df = wine_df.tail(1) | |
latest_wine_string = latest_wine_df.to_string(index=False) | |
# Predict the wine class | |
mr = project.get_model_registry() | |
model = mr.get_model("wine_class_model", version=1) | |
model_dir = model.download() | |
model = joblib.load(model_dir + "/wine_class_model.pkl") | |
batch_data, batch_label = feature_target_split(wine_df, 'quality') | |
batch_data = one_hot_encoder(batch_data, 'type') | |
y_pred = model.predict(batch_data.tail(1)) | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
with gr.Column(): | |
gr.Label("Most Recent Wine Added") | |
out = gr.Textbox(latest_wine_string, readonly=True) | |
with gr.Column(): | |
gr.Label("Predicted Wine Class") | |
out = gr.Textbox(y_pred[0], readonly=True) | |
with gr.Row(): | |
with gr.Column(): | |
gr.Label("Recent Prediction History") | |
input_img = gr.Image("df_recent.png", elem_id="recent-predictions") | |
with gr.Column(): | |
gr.Label("Confusion Matrix with Historical Prediction Performance") | |
input_img = gr.Image("confusion_matrix.png", elem_id="confusion-matrix") | |
demo.launch() | |