Technologie

Implémentation de forêt aléatoire dans R – Joe Tran

Implémentation de forêt aléatoire dans R - Joe Tran


Une application pratique de la forêt aléatoire dans la classification des patientes atteintes d'un cancer du sein

2*jNXWjKIPrTRYTOxzdqfQPA - Implémentation de forêt aléatoire dans R - Joe Tran
Photo par Rural Explorer sur Unsplash

Afin de comprendre RF, nous devons d'abord comprendre les arbres de décision. Rajesh S. Brid a écrit un article détaillé sur les arbres de décision. Nous n'entrerons pas trop dans les détails sur la définition des arbres de décision car ce n'est pas le but de cet article. Je veux juste résumer rapidement quelques points. Un arbre de décision est une série de questions Oui / Non. Pour chaque niveau de l’arbre, si votre réponse est Oui, vous tombez dans une catégorie, sinon vous tomberez dans une autre catégorie. Vous répondrez à cette série de questions Oui / Non jusqu'à la catégorie finale. Vous serez classé dans ce groupe.

Tiré d'ici

Les arbres fonctionnent bien avec les données que nous utilisons pour entraîner, mais ils ne fonctionnent pas bien quand il s'agit de nouveaux échantillons de données. Heureusement, Random Forest est une combinaison de plusieurs arbres de décision alliant souplesse et souplesse, ce qui permet d’améliorer la précision.

Ici, je ne vais pas trop entrer dans les détails à propos de RF, car il y a différentes sources extérieures qui nous permettent de comprendre quelles sont les mathématiques derrière tout cela. Voici l'un d'entre eux.

Cet article traite davantage de l’application pratique de la radiofréquence à la classification des patients cancéreux. Je vais donc passer directement au codage. Maintenant ouvrons Rstudio et nous salirons les mains :)

Tout d’abord, nous devons charger les paquets suivants. Si vous ne pouvez pas les charger, il est probable que vous ne les ayez pas encore installées. Veuillez donc le faire avant de charger les paquets suivants.

bibliothèque (ggplot2)
bibliothèque (corrplot)
bibliothèque (reshape2)
bibliothèque (ggthemes)
bibliothèque (dplyr)
bibliothèque (randomForest)

Wisconsin = read.table (url (paste0 («https://archive.ics.uci.edu/ml/machine-learning-databases/»), "
"Cancer du sein-wisconsin / wdbc.data")), en-tête = FAUX, sep = ",", nrows = 570)

J'ai lu les données directement à partir du lien Web et nommé l'ensemble de données Wisconsin. Voyons un peu les données

tête (Wisconsin)

V1 étant l'ID, il n'est donc pas pertinent dans notre analyse. V2 est le résultat de la classification, avec «M» pour «Malignant» et «B» pour «Bénin». Le reste ne concerne que les variables d'information sur le diagnostic du cancer.

Maintenant, j'aimerais changer M et B en TRUE et FALSE pour faciliter l'interprétation.

Wisconsin $ V2 <- Wisconsin $ V2 == «M»

Données de prétraitement

Premièrement, nous mélangeons les données et les scindons en train et testons. Nous décidons un partage de 70-30 pour cela.

set.seed (2019)

test_size = floor (0.3 * nrow (Wisconsin))
samp = sample (nrow (Wisconsin), test_size, replace = FALSE)

y_train = Wisconsin[-samp,2]
x_train = Wisconsin[-samp,-c(1,2)] #comme la première colonne est juste un identifiant
y_test = Wisconsin[samp,2]
x_test = Wisconsin[samp,-c(1,2)] #comme la première colonne est juste un identifiant

#convertir les étiquettes en catégories
y_train = facteur (y_train)
y_test = facteur (y_test)

Notons que RF ne fonctionne que lorsque la variable de réponse est un facteur. En ce moment même, lorsque nous convertissons ‘M’ et ‘B’ en TRUE et FALSE, le type de cette variable est logique. Nous devons donc le convertir en facteur en utilisant la fonction factor ().

Combinons maintenant x et y pour former un ensemble d’entraînement et de test.

#Créer un kit de formation et un kit de test
train = cbind (y_train, x_train)
test = cbind (y_test, x_test)

L'ensemble de formation sera utilisé pour former le modèle RF et l'ensemble de test pour tester les performances du modèle. Donnons maintenant le nom de notre variable de réponse. Ici, je l’ai nommé «label»

colnames (train)[1] = 'Label'
colnames (test)[1] = 'Label'

Il ressemble maintenant à ceci

Ajuster un modèle de forêt aléatoire

Maintenant tout est prêt. Nous pouvons commencer à adapter le modèle. Cette étape est facile.

La fonction ‘randomForest ()’ du package adapte un modèle de forêt aléatoire aux données. Outre l'inclusion du jeu de données et la spécification de la formule et des étiquettes, certains paramètres clés de cette fonction incluent:

1. Ntree: Nombre d'arbres à cultiver. La valeur par défaut est 500.

2 mtry: Nombre de variables sélectionnées aléatoirement pour chaque division. Dans cet exemple, nous utilisons la racine carrée de p (p désigne le nombre de prédicteurs). Notez que pour l'analyse de régression, la règle générale consiste à utiliser mtry = p / 3 et constitue également la valeur par défaut de ce paramètre pour la régression.

3 importance: Si True, le modèle calculera l’importance de la fonctionnalité pour une analyse ultérieure. (défaut = False)

4 proximité: Si True, le modèle contiendra une matrice N * N qui représente la mesure de proximité.

5 maxnodes: Le nombre maximum de nœuds terminaux que les arbres peuvent avoir.

6 n / a.action: Une fonction pour spécifier comment les données manquantes doivent être traitées.

Puisqu'il y a 30 variables indépendantes, nous définissons mtry être la racine carrée de 30 et ensuite adapter le modèle

mtry = sqrt (30)
model_1 = randomForest (label ~., data = train, importance = TRUE)

C'est ça. Simple n'est-ce pas? Maintenant nous avons déjà un modèle RF

print (model_1)

Le taux d’estimation des erreurs hors bande hors du sac est de 3%, ce qui est très bon, c’est-à-dire que la précision est de 97%. Si nous examinons la matrice de confusion, nous pouvons voir que l'erreur de classification est assez faible. Cela montre que notre modèle RF se comporte bien dans la classification de la rame.

Testons le modèle avec notre ensemble de test.

pred_1 = prédire (model_1, x_test)
table (y_test, pred_1)

exactitude_m1 = moyenne (y_test == pred_1)

On dirait que notre modèle fonctionne bien sur le jeu de test, avec une précision de 95%.

Importance Variable

varImpPlot (model_1)

Importance des variables dans le modèle. Plus le rang est élevé, plus les variables sont importantes

Une autre façon pour nous de visualiser l’intrigue est d’utiliser Paquet de ggplot. Notez que le code ci-dessous montre la "précision moyenne de la diminution". Pour obtenir le ‘Mean Decrease Gini’, modifiez simplement la ligne en gras ci-dessous en ‘MeanDecreaseAccuracy’ (sans espacement).

importance = importance (model_1)
varImportance = data.frame (Variables = row.names (importance),
Importance = round (importance[“[“MeanDecreaseAccuracy”], 2))

rankImportance = varImportance%>% mutate (Rank = paste ('#', dense_rank (desc (Importance)))))

ggplot (rankImportance, aes (x = reorder (Variables, Importance)),
y = importance, remplissage = importance)) +
geom_bar (stat = ’identity’) +
geom_text (aes (x = variables, y = 0.5, label = rang),
hjust = 0, vjust = 0,55, taille = 4, couleur = ‘blanc’) +
labs (x = ‘Variables’) +
coord_flip () +
theme_classic ()

Précision de diminution moyenne

Le résultat est similaire à l'intrigue que nous avons obtenue précédemment. Le résultat montre que les variables V25, V30, V26 et V23 sont les plus importantes.

Diminution moyenne de Gini

En utilisant Mean Decrease Gini, nous obtenons V25, V23 et V26 comme variables les plus importantes.

Cet article explique comment implémenter un modèle de forêt aléatoire simple pour résoudre des problèmes de classification. Je n’ai pas trop approfondi la manière d’ajuster les paramètres afin d’optimiser le modèle car, avec une précision de classification aussi élevée, je pense qu’un modèle simple suffirait. CEPENDANT, dans la vie réelle, il existe d’autres problèmes de classification beaucoup plus complexes qui nous obligent à ajuster les paramètres pour obtenir le meilleur modèle, sur lequel j’écrirai un article séparé la prochaine fois. Mais il est important de se rappeler de TOUJOURS commencer avec un modèle simple, puis de le construire pour obtenir une meilleure prédiction.

Merci pour votre temps. J'espère que cet article vous aidera, en particulier ceux qui n'ont jamais essayé d'implémenter RF en R, à mieux comprendre comment le faire. Faites-moi savoir si vous avez des commentaires ou des questions.

Bonne journée et bonne programmation :)

Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close