data(iris)

n <- 100
x <- scale(iris[1:n,1:2])
y <- as.numeric(iris[1:n,5])-1
fisher <- data.frame(y=as.factor(y),x1=x[,1],x2=x[,2])

summary(fisher)
    
library(caret)

# EVALUATION DE L'ERREUR DE CLASSIFICATION SANS VALIDATION CROISEE
# POUR k=1

model.knn <- knn3(y~x1+x2,data=fisher,k=1)
mean(predict(model.knn,fisher,type="class")!=y)

# EVALUATION DE L'ERREUR DE CLASSIFICATION AVEC VALIDATION CROISEE
# A 2 ENSEMBLES REPETEE 100 FOIS POUR k=1

model.knn <- train(y~x1+x2,data=fisher,method="knn",metric="Sensitivity",
                  trControl=trainControl(method="repeatedcv",number=2,repeats=100),
                  tuneGrid=data.frame(k=c(1,3,5,7)))

# CHOIX PAR VALIDATION CROISEE A 2 ENSEMBLES REPETEE 100 FOIS
# DE LA MEILLEURE VALEUR DE k

tune.knn <- train(y~x1+x2,data=fisher,method="knn",metric="Accuracy",
trControl=trainControl(method="repeatedcv",number=5,repeats=100),
    tuneGrid=data.frame(k=seq(1,49,by=2)))

plot(tune.knn)
print(tune.knn)

Modifié le: vendredi 11 septembre 2020, 17:00