#--------------------------------------------#
# INSTALLATION/MAJ DES LIRAIRIES NECESSAIRES #
#--------------------------------------------#
install.packages("rpart")
install.packages("randomForest")
install.packages("kknn")
install.packages("ROCR")
#--------------------------------------#
# ACTIVATION DES LIRAIRIES NECESSAIRES #
#--------------------------------------#
library(rpart)
library(randomForest)
library(kknn)
library(ROCR)
#-------------------------#
# PREPARATION DES DONNEES #
#-------------------------#
# Chargement des donnees
produit_QF <- read.csv("Data Produit QF.csv", header = TRUE, sep = ",", dec = ".",
stringsAsFactors = T)
# Creation des ensembles d'apprentissage et de test
produit_QF_EA <- produit_QF[1:400,]
produit_QF_ET <- produit_QF[401:600,]
# Suppression de la variable ID (identifiant)
produit_QF_EA <- subset(produit_QF_EA, select = -ID)
#-------------------------#
# ARBRE DE DECISION RPART #
#-------------------------#
# Definition de la fonction d'apprentissage, test et evaluation par courbe ROC
test_rpart <- function(arg1, arg2, arg3, arg4){
# Apprentissage du classifeur
dt <- rpart(Produit~., produit_QF_EA, parms = list(split = arg1), control =
rpart.control(minbucket = arg2))
# Tests du classifieur : classe predite
dt_class <- predict(dt, produit_QF_ET, type="class")
# Matrice de confusion
print(table(produit_QF_ET$Produit, dt_class))
# Tests du classifieur : probabilites pour chaque prediction
dt_prob <- predict(dt, produit_QF_ET, type="prob")
# Courbes ROC
dt_pred <- prediction(dt_prob[,2], produit_QF_ET$Produit)
dt_perf <- performance(dt_pred,"tpr","fpr")
plot(dt_perf, main = "Arbres de décision rpart()", add = arg3, col = arg4)
# Calcul de l'AUC et affichage par la fonction cat()
dt_auc <- performance(dt_pred, "auc")
cat("AUC = ", as.character(attr(dt_auc, "y.values")))
# Return sans affichage sur la console
invisible()
}
#----------------#
# RANDOM FORESTS #
#----------------#
# Definition de la fonction d'apprentissage, test et evaluation par courbe ROC
test_rf <- function(arg1, arg2, arg3, arg4){
# Apprentissage du classifeur
rf <- randomForest(Produit~., produit_QF_EA, ntree = arg1, mtry = arg2)
# Test du classifeur : classe predite
rf_class <- predict(rf,produit_QF_ET, type="response")
# Matrice de confusion
print(table(produit_QF_ET$Produit, rf_class))
# Test du classifeur : probabilites pour chaque prediction
rf_prob <- predict(rf, produit_QF_ET, type="prob")
# Courbe ROC
rf_pred <- prediction(rf_prob[,2], produit_QF_ET$Produit)
rf_perf <- performance(rf_pred,"tpr","fpr")
plot(rf_perf, main = "Random Forests randomForest()", add = arg3, col = arg4)
# Calcul de l'AUC et affichage par la fonction cat()
rf_auc <- performance(rf_pred, "auc")
cat("AUC = ", as.character(attr(rf_auc, "y.values")))
# Return sans affichage sur la console
invisible()
}
#---------------------#
# K-NEAREST NEIGHBORS #
#---------------------#
# Definition de la fonction d'apprentissage, test et evaluation par courbe ROC
test_knn <- function(arg1, arg2, arg3, arg4){
# Apprentissage et test simultanes du classifeur de type k-nearest neighbors
knn <- kknn(Produit~., produit_QF_EA, produit_QF_ET, k = arg1, distance = arg2)
# Matrice de confusion
print(table(produit_QF_ET$Produit, knn$fitted.values))
# Courbe ROC
knn_pred <- prediction(knn$prob[,2], produit_QF_ET$Produit)
knn_perf <- performance(knn_pred,"tpr","fpr")
plot(knn_perf, main = "Classifeurs K-plus-proches-voisins kknn()", add = arg3,
col = arg4)
# Calcul de l'AUC et affichage par la fonction cat()
knn_auc <- performance(knn_pred, "auc")
cat("AUC = ", as.character(attr(knn_auc, "y.values")))
# Return sans affichage sur la console
invisible()
}
#-------------------------------------------------#
# APPRENTISSAGE DES CONFIGURATIONS ALGORITHMIQUES #
#-------------------------------------------------#
# Arbres de decision
test_rpart("gini", 10, FALSE, "red")
test_rpart("gini", 5, TRUE, "blue")
test_rpart("information", 10, TRUE, "green")
test_rpart("information", 5, TRUE, "orange")
# Forets d'arbres decisionnels aleatoires
test_rf(300, 3, FALSE, "red")
test_rf(300, 5, TRUE, "blue")
test_rf(500, 3, TRUE, "green")
test_rf(500, 5, TRUE, "orange")
# K plus proches voisins
test_knn(10, 1, FALSE, "red")
test_knn(10, 2, TRUE, "blue")
test_knn(20, 1, TRUE, "green")
test_knn(20, 2, TRUE, "orange")