| import joblib |
| import numpy as np |
| import pandas as pd |
| from traning_zone.traitement_data.feature_engeneering.data_clearning import * |
| import spacy |
|
|
| class Prediction: |
| def __init__(self, X): |
| self.X = X |
| self.pred = None |
| self.pred_famille = None |
| self.pred_classe = None |
| self.X_orig = X |
| self.modele = None |
| self.tv = None |
| self.obj = None |
|
|
|
|
| def init_mini_modele_transformer(self, classe, model) -> None: |
| self.modele = joblib.load(f'traning_zone/mini_modèle_/{classe}/{model}/{model}.pkl') |
| self.obj = joblib.load(f'traning_zone/mini_modèle_/{classe}/transformers/object.pkl') |
| self.tv = joblib.load(f'traning_zone/mini_modèle_/{classe}/transformers/tv_transform.pkl') |
|
|
|
|
|
|
| def init_mini_spacy_model(self, classe): |
| self.modele = spacy.load(f"traning_zone/mini_modeles_spacy/{classe}/spacy_textcat1/model-best") |
| |
|
|
| def init_modele_transformer(self, modele) -> None: |
| self.modele = joblib.load(f'traning_zone/hyper_modèle/{modele}/{modele}.pkl') |
| self.obj = joblib.load('traning_zone/hyper_modèle/transformers/object.pkl') |
| self.tv = joblib.load('traning_zone/hyper_modèle/transformers/tv_transform.pkl') |
|
|
|
|
| def prediction_grand_modele_spacy(self) -> None: |
| self.pred = [] |
| try: |
| trained_nlp = spacy.load("traning_zone/hyper_modèle/SpaCy/spacy_textcat1/model-best") |
| for x in self.X: |
| x = clearning_pred(x) |
| doc = trained_nlp(x) |
| self.pred.append(doc.cats) |
| except FileNotFoundError: |
| print("Error : File Not Found error") |
| pass |
|
|
|
|
| def predict_with_model(self, x, classe, model_name) -> str: |
| try: |
| Prediction.init_mini_modele_transformer(self, classe, model_name) |
| tv_x = self.tv.transform(x) |
| y_pred = self.modele.predict(tv_x) |
| return self.obj.inverse_transform(y_pred)[0] |
| except FileNotFoundError: |
| print("Error : File Not Found error") |
| return None |
|
|
|
|
| def prediction_grand_modele(self) -> None: |
| try: |
| Prediction.init_modele_transformer(self, "LogisticRegression") |
| self.X = self.X.apply(clearning_pred) |
| tv_x = self.tv.transform(self.X) |
| y_pred = self.modele.predict(tv_x) |
| self.pred = self.obj.inverse_transform(y_pred) |
| except FileNotFoundError: |
| print("Error : File Not Found error") |
| pass |
|
|
|
|
|
|
| def final_prediction(self) -> pd.DataFrame: |
| Prediction.prediction_grand_modele(self) |
| pred = self.pred.copy() |
| pr = pred |
| for i in range(len(self.pred)): |
| classe = self.pred[i] |
| if classe not in ["maquillage", "prdouits diététiques", "hygiène bébé"]: |
| self.pred[i] = self.predict_with_model([self.X[i]], classe, "LogisticRegression") |
| else: |
| self.pred[i] = self.predict_with_model([self.X[i]], classe, "svm") |
| return pd.DataFrame({"item_desc": self.X_orig , "classe": self.pred, "hyper classe": pr}) |
|
|
|
|
| def final_prediction_(self) -> pd.DataFrame: |
| Prediction.prediction_grand_modele_spacy(self) |
| pred = self.pred.copy() |
| pr = pred |
| for i in range(len(self.pred)): |
| classe = max(self.pred[i], key=self.pred[i].get).lower() |
| if classe not in ["maquillage", "prdouits diététiques", "hygiène bébé"]: |
| self.pred[i] = self.predict_with_model([self.X[i]], classe, "LogisticRegression") |
| else: |
| self.pred[i] = self.predict_with_model([self.X[i]], classe, "svm") |
| return pd.DataFrame({"item_desc": self.X_orig , "classe": self.pred, "hyper classe": pr}) |
|
|
|
|
|
|
| def prediction_modele_spacy(self) : |
| self.pred_famille = [] |
| self.pred_classe = [] |
| try: |
| trained_nlp = spacy.load("traning_zone/hyper_modèle/SpaCy/spacy_textcat1/model-best") |
| for x in self.X: |
| x = clearning_pred(x) |
| doc = trained_nlp(x) |
| self.pred_famille.append(doc.cats) |
|
|
| classe = max(doc.cats, key=doc.cats.get).lower() |
| Prediction.init_mini_spacy_model(self, classe) |
|
|
| doc = self.modele(x) |
| self.pred_classe.append(doc.cats) |
| except FileNotFoundError: |
| print("Error : File Not Found error") |
| pass |
|
|
| return pd.DataFrame({"item_desc" : self.X_orig, "classe": self.pred_classe, "famille": self.pred_famille}) |