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) 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): """ Make a prediction on one sample using the loaded model. INPUT ----- X: the data to predict a label for OUTPUT ------ predicted label """ # Check if the array is 1-dimensional aka one sample if len(X.shape) != 1: raise ValueError("Input array must be one-dimensional (one sample), but got a shape of {}".format(X.shape)) return # Reshape the array X = X.reshape(1, -1) # scale the data X_scaled = self.scale(X) # Now, use the scaled data to make predictions using the loaded model predicted_label = self.model.predict(X_scaled) return predicted_label