Adding some comments

master
Aurian JAULT 1 year ago
parent 917dd02b86
commit 79faffd3cc

@ -122,6 +122,7 @@ def printStatValues(ypredit,ytest):
# Train model # Train model
def training(model, x, y): def training(model, x, y):
# Sépare les données test (25%) des données d'entrainement (65%)
Xtrain, Xtest, ytrain, ytest = train_test_split(x, y,test_size=0.25, random_state=0) Xtrain, Xtest, ytrain, ytest = train_test_split(x, y,test_size=0.25, random_state=0)
Xtrain = Xtrain.values Xtrain = Xtrain.values
Xtest = Xtest.values Xtest = Xtest.values
@ -130,12 +131,11 @@ def training(model, x, y):
Xtrain = Xtrain.reshape(-1, 1) Xtrain = Xtrain.reshape(-1, 1)
if len(Xtest.shape) < 2: if len(Xtest.shape) < 2:
Xtest = Xtest.reshape(-1, 1) Xtest = Xtest.reshape(-1, 1)
# Entrainement du model choisi
model.fit(Xtrain,ytrain) model.fit(Xtrain,ytrain)
ypredict = model.predict(Xtest) ypredict = model.predict(Xtest)
# confusion_matrix(ytrain, ypredict)
# os.system("clear")
res = -1 res = -1
while(res != 0): while(res != 0):
print(" Rentre un chiffre:\n\n1 - Stats %\n2 - Stats raw\n3 - accuracy_score") print(" Rentre un chiffre:\n\n1 - Stats %\n2 - Stats raw\n3 - accuracy_score")
@ -155,6 +155,9 @@ def training(model, x, y):
else: else:
raise Exception('Wrong entry') raise Exception('Wrong entry')
# Divise par 1.5 le nombre de galaxy
# (On a essayé d'équilibrer les différentes classes mais ça a affaiblit nos modèles à chaque fois)
def clearData(df): def clearData(df):
res = df["class"].value_counts() res = df["class"].value_counts()
dtemp = df.sort_values(by=['class']) dtemp = df.sort_values(by=['class'])
@ -163,6 +166,7 @@ def clearData(df):
dtemp = dtemp.iloc[34000:] dtemp = dtemp.iloc[34000:]
return dtemp return dtemp
# Affiche un camembert de la répartition des classes présentes dans le csv
def showData(df): def showData(df):
res = df["class"].value_counts() res = df["class"].value_counts()
x = [res["GALAXY"],res["QSO"],res["STAR"]] x = [res["GALAXY"],res["QSO"],res["STAR"]]
@ -184,7 +188,14 @@ def rfecv_test(x, y, model):
rfe.fit(x,y) rfe.fit(x,y)
for i in range(x.shape[1]): for i in range(x.shape[1]):
print('Column: %d, Selected %s, Rank: %.3f' % (i, rfe.support_[i], rfe.ranking_[i])) print('Column: %d, Selected %s, Rank: %.3f' % (i, rfe.support_[i], rfe.ranking_[i]))
# Entraine "tout" les modèles en itérant sur les colonnes fournis (pas tous les cas car trop long).
# Seulement sur les modèles KNN et TreeClassifier car trop long
# EXEMPLE => colonnes = [A,B,C]
# itèrations :
# [A], [A,B], [A,B,C]
# [B], [B,C]
# [C]
def allModels(df): def allModels(df):
dfClone = df.copy() dfClone = df.copy()
# Aditionnale model randomforestclassifier(n_estimators=100 ,criterion='entropy', n_jobs=-1) # Aditionnale model randomforestclassifier(n_estimators=100 ,criterion='entropy', n_jobs=-1)
@ -193,6 +204,7 @@ def allModels(df):
y = df['class'].values y = df['class'].values
x = list(dfTemp.columns.values) x = list(dfTemp.columns.values)
datas = [] datas = []
# Itère sur les colonnes
for i in range(0,len(x)): for i in range(0,len(x)):
arrayColumns = [x[i]] arrayColumns = [x[i]]
for j in range(i+1,len(x)): for j in range(i+1,len(x)):
@ -218,8 +230,15 @@ def allModels(df):
datas.append(setUp.copy()) datas.append(setUp.copy())
arrayColumns.append(x[j]) arrayColumns.append(x[j])
# datas est de la forme suivante :
# datas =
# [
# [Listes_des_colonnes],
# {'KNN': acccuray,'Tree': accuracy}
# ]
return datas return datas
# Permet d'entrainer un model et retourne l'accuracy score
def customTrainingRaw(model, x, y,res=-1): def customTrainingRaw(model, x, y,res=-1):
Xtrain, Xtest, ytrain, ytest = train_test_split(x, y,test_size=0.25, random_state=0) Xtrain, Xtest, ytrain, ytest = train_test_split(x, y,test_size=0.25, random_state=0)
Xtrain = Xtrain.values Xtrain = Xtrain.values
@ -233,6 +252,7 @@ def customTrainingRaw(model, x, y,res=-1):
print(accuracy_score(ytest, ypredit)) print(accuracy_score(ytest, ypredit))
return accuracy_score(ytest, ypredit) return accuracy_score(ytest, ypredit)
# Créer un nuiage de points de l'accuracy en fonction des colonnes itérées pour Knn et Tree
def showStat(datas): def showStat(datas):
fig, ax = plt.subplots() fig, ax = plt.subplots()
x_data = [] x_data = []
@ -250,7 +270,7 @@ def showStat(datas):
ax.legend() ax.legend()
plt.show() plt.show()
# Trouve la meilleur accuracy et print le model + les colonnes
def bestModel(datas): def bestModel(datas):
max = 0 max = 0
min = 1 min = 1
@ -292,7 +312,7 @@ def auto_sklearn():
print("Accuracy score", sklearn.metrics.accuracy_score(y_test, y_hat)) print("Accuracy score", sklearn.metrics.accuracy_score(y_test, y_hat))
def plotAll(): def plotAll():
df = read_dataset('data.csv') x,df,y = read_dataset('data.csv')
plotHistograms(df) plotHistograms(df)
plotDensity(df) plotDensity(df)
@ -337,9 +357,9 @@ def plotScatterMatrix(df):
#bestModel(datas) #bestModel(datas)
# Génère un nuage de points affichant l'accuracy du model Knn et TreeClassifier en fonction des colonnes utilisées. # Génère un nuage de points affichant l'accuracy du model Knn et TreeClassifier en fonction des colonnes utilisées.
datas = allModels(df) # datas = allModels(df)
showStat(datas) # showStat(datas)
bestModel(datas) # bestModel(datas)
# Affiche un menu permettant de choisir le model à entrainer, ainsi que des stats suplémentaires # Affiche un menu permettant de choisir le model à entrainer, ainsi que des stats suplémentaires
# main() main()

Loading…
Cancel
Save