Académique Documents
Professionnel Documents
Culture Documents
https://archive.ics.uc i.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29
1
2. Objectif de TP:
Nous allons travailler sur les données Breast Cancer Wisconsin. L'algorithme du k plus proche
voisin est utilisé pour prédire si un patient a un cancer (tumeur maligne) ou non (tumeur
bénigne).
2
# Créer des données d'entraînement et de test
> wbcd_train <- wbcd_n[1:469, ]
# Partitionner le data.frame par des index
de lignes
> wbcd_test <- wbcd_n[470:569, ]
# Créer des étiquettes pour les données d'entraînement et de test
> wbcd_train_labels <- wbcd[1:469, 1]
# Ce code prend les modalités de
«diagnostic» dans la colonne 1 de
data.frame wbcd et crée à son tour le
data.frame wbcd_train_labels et
wbcd_test_labels
> wbcd_test_labels <- wbcd[470:569, 1]
Méthode 1:
> Acc <- length (which (wbcd_test_labels == wbcd_test_pred )==
TRUE)/length(wbcd_test_labels) # La fonction which () retourne l’index
de valeur qui satisfait la condition
# La fonction length() retourne le
nombre d’éléments
> Acc
> Acc
Méthode 2:
# Créer la table de contingence
# Charger la bibliothèque "gmodels"
> install.packages("gmodels", dependencies = TRUE)
> library(gmodels)
3
> CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq = FALSE)
Les données de test consistaient en 100 observations. Parmi lesquels 61 cas ont été prédits
avec précision (TN-> Vrais négatifs) comme bénigne (B), ce qui constitue 61.0 %. En
outre, 37 observations sur 100 ont été prédites avec précision (TP-> Vrais positifs) comme
étant de nature maligne (M), ce qui constitue 37.0%. Il n'y a eu aucun cas de faux positifs
(FP), ce qui signifie qu'aucun cas n'a été enregistré qui est en fait de nature bénigne, mais
qui a été prédit comme maligne. Les FN, constituent deux cas qui sont en fait de natures
malignes mais qui ont été prédit comme bénignes. Les FN créent une menace potentielle et
l'objectif principal pour augmenter la précision du modèle est de les réduire.
# Créer la matrice de confusion
> cm <- table(wbcd_test_labels , wbcd_test_pred)
Méthode 3:
> Install.packages(caret)
> library(caret)
> confusionMatrix(wbcd_test_pred ,wbcd_test_labels)
Méthode 1:
> test_accuracy=1
> i=1 # Initialiser la boucle for
> for (i in 1:15){
wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test,cl= wbcd_train_labels,
k=i)
4
test_accuracy[i] <- 100 * sum(wbcd_test_labels==
wbcd_test_pred)/NROW(wbcd_test_labels)
k=i
cat(k,'=',test_accuracy[i],'\n') # Imprimer le pourcentage de précision
}
> plot(test_accuracy, type="b", xlab="valeur de k",ylab="précision") # Pour
tracer la
précision par
rapport à la
valeur k
Méthode 2:
# Choisir différentes valeurs de k
# K = 3
> wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test,cl=wbcd_train_labels,
k=3)
> misClassError <- mean(wbcd_test_pred != wbcd_train_labels) # Calculer
l’erreur de
classification
> print(paste('Accuracy =', 1-misClassError))
# K = 5
> wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl=wbcd_train_labels,
k=5)
> misClassError <- mean(wbcd_test_pred != wbcd_train_labels)
> print(paste('Accuracy =', 1-misClassError))
# K = 7
> wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl=wbcd_train_labels,
k=7)
> misClassError <- mean(wbcd_test_pred != wbcd_train_labels)
> print(paste('Accuracy =', 1-misClassError))
Méthode 3:
# Choisir différentes valeurs de k
> wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl =
wbcd_train_labels, k=1)
> CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)
> wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl =
wbcd_train_labels, k=5)
> CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)
> wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl =
wbcd_train_labels, k=11)
5
> CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)
> wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl =
wbcd_train_labels, k=15)
> CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)
> wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl =
wbcd_train_labels, k=21)
> CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)
> wbcd_test_pred <- knn(train = wbcd_train, test = wbcd_test, cl =
wbcd_train_labels, k=27)
> CrossTable(x = wbcd_test_labels, y = wbcd_test_pred, prop.chisq=FALSE)