Vous êtes sur la page 1sur 7

TD - TP1 Exercice III RNA

February 15, 2024

[1]: #Importation des bibliothèques


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import validation_curve

[2]: #Séparation des données en X = entrées et y = sortie


cancer = load_breast_cancer()
X = cancer.data
y = cancer.target

[3]: t = 0.2
X_train, X_test, Y_train, Y_test = train_test_split(X,y,test_size=t)
print("Train set : ", X_train.shape)
print("Test set : ", X_test.shape)

Train set : (455, 30)


Test set : (114, 30)

[4]: #Mise en place des différents modèles


model1 = KNeighborsClassifier(1)
model3 = KNeighborsClassifier(3)
model4 = KNeighborsClassifier(4)

[5]: #Entrainement du modèle 1 avec k = 1


model1.fit(X_train, Y_train)

[5]: KNeighborsClassifier(n_neighbors=1)

[6]: #Détermination du score du modèle 1


score1 = round(model1.score(X_test, Y_test), 2)

[7]: #Entrainement du modèle 3 avec k = 3


model3.fit(X_train, Y_train)

1
[7]: KNeighborsClassifier(n_neighbors=3)

[8]: #Détermination du score du modèle 3


score2 = round(model3.score(X_test, Y_test), 2)

[9]: #Entrainement du modèle 4 avec k = 4


model4.fit(X_train, Y_train)

[9]: KNeighborsClassifier(n_neighbors=4)

[10]: #Détermination du score du modèle 4


score3 = round(model4.score(X_test, Y_test), 2)

[11]: #Question 1 : Nous avons utilisé le jeu de données load_breast_cancer avec


# 80% de données d'entrainement et 20% de données de test
compare_score = pd.DataFrame(
{
'Model' : ['Model(k=1)', 'Model(k=3)', 'Model(k=4)'],
'Score' : [score1, score2, score3]
})

[12]: #Question 2 : Evaluation finale en conclusion pour k=4 nous obtenons le␣
↪meilleur score

print(compare_score)

Model Score
0 Model(k=1) 0.92
1 Model(k=3) 0.92
2 Model(k=4) 0.93

[13]: #Modification du découpage du jeu de données 60% de données d'entrainement et␣


↪40% de données de test

t = 0.4
X_train, X_test, Y_train, Y_test = train_test_split(X,y,test_size=t)
print("Train set : ", X_train.shape)
print("Test set : ", X_test.shape)

Train set : (341, 30)


Test set : (228, 30)

[14]: model1 = KNeighborsClassifier(1)


model3 = KNeighborsClassifier(3)
model4 = KNeighborsClassifier(4)

[15]: #paramètre du modèle 1


model1.fit(X_train, Y_train)
score1 = round(model1.score(X_test, Y_test), 2)

2
[16]: #paramètre du modèle 3
model3.fit(X_train, Y_train)
score2 = round(model3.score(X_test, Y_test), 2)

[17]: #paramètre du modèle 4


model4.fit(X_train, Y_train)
score3 = round(model4.score(X_test, Y_test), 2)

[18]: #Question 3 : les nouvelles performances obtenus sont ainsi affichées


compare_score = pd.DataFrame(
{
'Model' : ['Model(k=1)', 'Model(k=3)', 'Model(k=4)'],
'Score' : [score1, score2, score3]
})
print(compare_score)

Model Score
0 Model(k=1) 0.91
1 Model(k=3) 0.92
2 Model(k=4) 0.92

[19]: #Nous constatons que le modèle 3 reste le meilleur

[20]: #Question 4 : Importation des bibliothèques nécessaires

[21]: #Question 4 - B :
cross_val_score(KNeighborsClassifier(), X_train, Y_train, cv = 5, scoring =␣
↪'accuracy')

[21]: array([0.94202899, 0.94117647, 0.95588235, 0.91176471, 0.88235294])

[22]: #Question 4 - C : Enregistrement des données


val_score = []
for k in range(1,50):
score = cross_val_score(KNeighborsClassifier(k), X_train, Y_train, cv = 5,␣
↪scoring = 'accuracy').mean()

val_score.append(score)

print(val_score)

[0.9090366581415175, 0.9002557544757034, 0.9207587382779199, 0.9208013640238704,


0.9266410912190963, 0.9236999147485081, 0.9384057971014494, 0.9384057971014494,
0.9295822676896845, 0.9325234441602728, 0.935464620630861, 0.929624893435635,
0.9325234441602728, 0.9325234441602728, 0.9295822676896845, 0.9266837169650468,
0.9295822676896845, 0.9237425404944586, 0.9208013640238704, 0.920843989769821,
0.915004262574595, 0.9091219096334185, 0.9179028132992327, 0.9179028132992327,
0.9120630861040068, 0.9120630861040068, 0.9091219096334185, 0.9062233589087809,
0.9061807331628303, 0.9032395566922421, 0.9061381074168798, 0.9002557544757034,
0.9031969309462916, 0.9031969309462916, 0.9032395566922421, 0.9032395566922421,

3
0.9003410059676045, 0.9003410059676045, 0.9003410059676045, 0.9003410059676045,
0.9032821824381927, 0.8973998294970162, 0.8973998294970162, 0.8973998294970162,
0.8973998294970162, 0.9003410059676045, 0.9032821824381927, 0.9003410059676045,
0.9003410059676045]

[23]: #Question 4 - D : Traçons les différents scores obtenus


plt.grid(True)
plt.plot(val_score, marker="+")
plt.xlabel('Les valeurs des k-voisins')
plt.ylabel('Les valeurs des différentes moyennes des scores')

[23]: Text(0, 0.5, 'Les valeurs des différentes moyennes des scores')

[34]: #Le modèle obtenu est le modèle k = 7 et k = 8 nous avons les mêmes valeurs
#car ils ont obtenu score = 0.9384057971014494

[25]: #Question E : Vérification des dimensions de train_score et de val_score


model = KNeighborsClassifier()
k = np.arange(1,50)
train_score, val_score = validation_curve(model, X_train, Y_train, param_name =␣
↪'n_neighbors', param_range=k, cv=5)

4
[26]: #Affichons la dimension de train_score
print(train_score.shape)

(49, 5)

[27]: #Affichons la dimension de val_score


print(val_score.shape)

(49, 5)

[28]: #Question F : visualisons les différents scores moyens en fonction du nombre de␣
↪voisin

plt.grid(True)
plt.plot(k, val_score.mean(axis=1), label='validation', marker='+')
plt.ylabel('score')
plt.xlabel('n_neighbors')

[28]: Text(0.5, 0, 'n_neighbors')

[29]: #Question G : Affichons la moyenne des données obtenus sur le jeu␣


↪d'entrainement

plt.grid(True)

5
plt.plot(k, train_score.mean(axis=1), color="r", label='validation', marker='+')
plt.ylabel('train')
plt.xlabel('n_neighbors')

[29]: Text(0.5, 0, 'n_neighbors')

[30]: #Nous remarquons que plus le nombre de voisins augmentent le score des données␣
↪entrainés diminue au fur et à mesure

[31]: #Pour afficher les


model1 = KNeighborsClassifier()
k = np.arange(1,50)
test_score, val_score1 = validation_curve(model1, X_test, Y_test, param_name =␣
↪'n_neighbors', param_range=k, cv=5)

[32]: #Question H : Affichons les données obtenus sur le jeu de test


plt.grid(True)
plt.plot(k, test_score.mean(axis=1), color="g", label='test', marker='+')
plt.ylabel('test')
plt.xlabel('n_neighbors')

6
[32]: Text(0.5, 0, 'n_neighbors')

[33]: #Nous remarquons que plus le nombre de voisins augmentent le score des données␣
↪de test diminue au fur et à mesure

Vous aimerez peut-être aussi