Bobilay/DIT_Supervised_Learning_Final_Project
0
1# Importer les packages2import pandas as pd3import numpy as np4from sklearn.preprocessing import LabelEncoder5from sklearn.preprocessing import StandardScaler6from sklearn.model_selection import GridSearchCV7from sklearn.tree import DecisionTreeClassifier8from sklearn.model_selection import train_test_split9 10 11class impModel:12 13 def __init__(self, csvDataPath):14 self.df = pd.read_csv(csvDataPath) # dataframe15 self.x = [] # variables prédicteurs16 self.y = [] # variable cible17 # Supprimer les doublons18 self.df.drop_duplicates(inplace = True)19 20 21 def encoder(self):22 # Créer un dictionnaire pour mapper les valeurs de 'etat'23 etat_mapping = {"D'occasion": 0, 'Réconditionné': 1, 'Neuf': 2, 'Venant': 3}24 # Remplacer les valeurs de 'etat' par les valeurs mappées25 self.df['etat'] = self.df['etat'].map(etat_mapping)26 27 # Créer différents encodeurs pour les variables catégorielles28 encoder0 = LabelEncoder() # pour adresse29 encoder1 = LabelEncoder() # pour marque30 encoders = [encoder0, encoder1]31 columns = [col for col in self.df.columns if self.df[col].dtype == 'object']32 for i in range(len(columns)):33 encoders[i].fit(self.df[columns[i]]) # le modèle prend le temps de reconnaitre les classes34 self.df[columns[i]] = encoders[i].transform(self.df[columns[i]]) # le modèle encode les variables35 return encoder0, encoder136 37 38 def normalization(self):39 # Fractionner les données40 self.x = self.df.drop('etat', axis = 1).values # variables prédicteurs41 self.y = self.df['etat'].values # variable cible42 # Instancier StandardScaler43 scaler = StandardScaler()44 # Normaliser x45 self.x = scaler.fit_transform(self.x)46 return scaler47 48 def decisionTree(self):49 # dictionnaire des params50 param_dt = {'criterion':['gini','entropy'],'max_depth':np.arange(3,15)}51 # instantier le modèle Decision Tree52 dt = DecisionTreeClassifier()53 # instantier le modèle gridsearch54 grid_dt = GridSearchCV(dt, param_dt, cv = 5)55 # entrainer le modèle56 grid_dt.fit(x_train, y_train)57 return grid_dt.best_params_58 59 def trainDeciionTree(self):60 #dt_best_params = decisionTree()61 # Splitter les données en train, val et test62 x_train, x_vt, y_train, y_vt = train_test_split(self.x, self.y , test_size = 0.2, random_state = 42)63 # Entrainer le modèle en utilisant les paramètres optimaux 'criterion': 'gini', 'max_depth': 364 dt = DecisionTreeClassifier(criterion = 'gini', max_depth = 3)65 # Entrainement66 dt.fit(x_train, y_train)67 return dt68 