smoker_model / model.py
FranciscoLozDataScience's picture
change procedure of prediction
f364b27
raw
history blame
2.07 kB
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from joblib import load
from sklearn.preprocessing import MinMaxScaler
from sklearn.ensemble import VotingClassifier
from xgboost import XGBClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
class SmokerModel:
def __init__(self, model_path, scaler_path):
self.model = load(model_path)
self.scaler = load(scaler_path)
self.labels = ["non-smoker", "smoker"]
def scale(self, X):
"""
Apply the scaler used to train the model to the new data
INPUT
-----
X: the data to be scaled
OUTPUT
------
returns the scaled data
"""
new_data_scaled = self.scaler.transform(X)
return new_data_scaled
def predict(self, X: np.ndarray) -> str: #TODO: change type to pd df
"""
Make a prediction on one sample using the loaded model.
INPUT
-----
X: the data to predict a label for
OUTPUT
------
predicted label
"""
# scale the data
X_scaled = self.scale(X)
# Check if the array is 1-dimensional aka one sample
# if len(X_scaled.shape) != 1:
# raise ValueError("Input array must be one-dimensional (one sample), but got a shape of {}".format(X.shape))
# return
#check array only has one sample
if X.shape[0] != 1:
raise ValueError("Input array must contain only one sample, but {} samples were found".format(X.shape[0]))
return
# Reshape the array
# X = X.reshape(1, -1)
# X_scaled = X_scaled.reshape(1, -1)
# # scale the data
# X_scaled = self.scale(X)
# Now, use the scaled data to make predictions using the loaded model
array = self.model.predict(X_scaled)
#predict
predicted_label = array[0]
str_label = self.labels[predicted_label]
return str_label