COULIBALY BOURAHIMA
first commit
f1f2665
import joblib
import numpy as np
import pandas as pd
from traning_zone.traitement_data.feature_engeneering.data_clearning import *
import spacy
class PredictionV:
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:
PredictionV.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:
PredictionV.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 prediction_lm_lm(self) -> pd.DataFrame:
PredictionV.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:
try :
self.pred[i] = self.predict_with_model([self.X[i]], classe, "svm")
except :
self.pred[i] = classe
return pd.DataFrame({"item_desc": self.X_orig , "classe": self.pred, "hyper classe": pr})
def prediction_spacy_lm(self) -> pd.DataFrame:
PredictionV.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") # le meilleur pour l'hyper classe
else:
try :
self.pred[i] = self.predict_with_model([self.X[i]], classe, "svm") # le meilleur pour l'hyper classe
except :
self.pred[i] = classe
return pd.DataFrame({"item_desc": self.X_orig , "classe": self.pred, "hyper classe": pr})
def prediction_spacy_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)
try :
classe = max(doc.cats, key=doc.cats.get).lower()
PredictionV.init_mini_spacy_model(self, classe)
doc = self.modele(x)
self.pred_classe.append(doc.cats)
except :
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, "hyper classe": self.pred_famille})
def prediction_lm_spacy(self):
PredictionV.prediction_grand_modele(self)
pred = self.pred.copy()
pr = pred
for i in range(len(self.pred)):
classe = self.pred[i]
x = clearning_pred(self.X[i])
try :
PredictionV.init_mini_spacy_model(self, classe)
doc = self.modele(x)
self.pred[i] = doc.cats
except :
pass
return pd.DataFrame({"item_desc": self.X_orig , "classe": self.pred, "hyper classe": pr})
def prediction(self, model_name ="spacy_spacy"):
data = None
modeles = {
"spacy_spacy" : PredictionV.prediction_spacy_spacy(self),
"spacy_lm" : PredictionV.prediction_spacy_lm(self),
"lm_lm" : PredictionV.prediction_lm_lm(self),
"lm_spacy" : PredictionV.prediction_lm_spacy(self)
}
try :
data = modeles[model_name]
except :
print("modèle inexistant")
return data