Résumé

Il s’agit de prévoir la gravité d’un cancer sur le jeu de données (Wisconsin Breast Cancer Database) à l’aide de la méthode des k plus proches voisins.

Données

Elles proviennent initialement de l’hopital de l’Université du Wisconsin à Madison et ont été collectées par (Wolberg and Mangasarian 1990) . Elles ont été complétées puis intégrées à la bibliothèque de . Sur ces données concernant le cancer du sein, il s’agit de prévoir la nature maligne ou bénigne de la tumeur à partir des variables biologiques. Les variables considérées sont :

library(mlbench)
data(BreastCancer) # Déclaration des données
summary(BreastCancer) # résumé des données
# retirer la colonne des identificateurs
data=BreastCancer[,-1]
# retirer les 16 valeurs manquantes
data=data[!is.na(data[,"Bare.nuclei"]),]
summary(data)
set.seed(111) # initialisation du générateur
# Extraction des échantillons
test.ratio=.2 # part de l’échantillon test
npop=nrow(data) # nombre de lignes dans les données
nvar=ncol(data) # nombre de colonnes
# taille de l’échantillon test
ntest=ceiling(npop*test.ratio)
# indices de l’échantillon test
testi=sample(1:npop,ntest)
# indices de l’échantillon d’apprentissage
appri=setdiff(1:npop,testi)

# construction de l’échantillon d’apprentissage
datapq=data[appri,]
# construction de l’échantillon test
datestq=data[testi,]
summary(datapq) # vérifications
summary(datestq)

Les données (variables explicatives) se présentent sous la forme de variables ordinales. On se propose de “tricher” en considérant les variables ordinales comme quantitatives entières. C’est à dire qu’elles sont associées à des “scores” évalués par le biologiste sur une échelle. Ceci nécessite de transformer les données pour en changer le type. A l’exception de la 10ème qui est la variable binaire à prévoir, les colonnes de type facteur sont transformées en un vecteur d’entiers puis en une matrice et enfin à nouveau en un “data frame”. Les noms des variables sont conservées.

datar=data.frame(matrix(as.integer(as.matrix(data[,1:9])),ncol=9,
                        dimnames=dimnames(data[,1:9])),Class=data[,10])

Vérification

# construction de l’échantillon d’apprentissage
datapr=datar[appri,]
# construction de l’échantillon test
datestr=datar[testi,]
summary(datapr) # vérifications
summary(datestr)

Knn avec 10 plus proches voisins

#Pour faire des knn rien de plus simple 
require(class)
pred.knn <- knn(train = datapr[,-10], test = datestr[,-10], cl = datapr[,10], k = 10)
summary(pred.knn)
table(pred.knn, datestr[,10])
1-mean(pred.knn!=datestr[,10])

Choix du nombre de voisins

require(caret)
?train
library(MASS)
data("Pima.te")
data("Pima.tr")
?Pima.tr
summary(Pima.tr)
summary(Pima.te)

Wolberg, William H, and Olvi L Mangasarian. 1990. “Multisurface Method of Pattern Separation for Medical Diagnosis Applied to Breast Cytology.” Proceedings of the National Academy of Sciences 87 (23). National Acad Sciences: 9193–6.