You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Un classifieur qui ne commet pas d'erreur, ce n'est pas réaliste. Les métriques sont calculées sur base d'une matrice de confusion. Des métriques permettent d'évaluer la qualité d'un classifieur comme le rappel, la précision, le taux d'erreur globale... Le nombre d'items dans chaque classe va influencer grandement la valeur de ces métriques. Ce tutoriel s'intéresse tout d'abord à l'effet des proportions entre les classes sur le classifieur et sur les métriques qui en évaluent les performances.
84
+
Un classifieur qui ne commet pas d'erreur, ce n'est pas réaliste. Les métriques sont calculées sur base d'une matrice de confusion. Des métriques permettent d'évaluer la qualité d'un classifieur comme le rappel, la précision, le taux d'erreur globale... Le nombre d'items dans chaque classe va influencer grandement la valeur de la plupart de ces métriques. Ce tutoriel s'intéresse à l'effet des proportions entre les classes sur le classifieur et sur les métriques qui en évaluent les performances.
85
85
86
-
Un autre manière d'influencer notre classifieur va être de modifier le seuil de détection. Étudier la variation du seuil de détection est l'objectif de la courbe ROC. Cette courbe représente le comportement de notre classifieur à deux classes pour tous les seuils de détection possibles.
86
+
Un autre manière d'influencer notre classifieur va être de modifier le seuil de détection. Étudier la variation du seuil de détection est l'objectif de la courbe ROC. Cette courbe représente le comportement de notre classifieur à deux classes pour tous les seuils de détection possibles. La seconde partie du tutoriel traitera de courbe ROC.
87
87
88
88
## Effet des proportions sur les métriques
89
89
90
-
Lorsqu'un classifieur ne commet aucune erreur. Les proportions de chacune des classes n'ont aucune importance. Qu'il y ait 10, 1000, 10000 individus par classe n'aura aucun effet. Par contre, dès qu'il y a des erreurs de classification, les proportions de chaque classe dans le set d'apprentissage vont avoir un effet sur les résultats de chaque métrique. Il peut être intéressant de modifier les proportions relatives de chaque classe afin de maximiser certaines métriques comme la précision ou le rappel. Cela va avoir également un effet sur les métriques globales (multiclasses) comme le taux de reconnaissance global.
90
+
Lorsqu'un classifieur ne commet aucune erreur, les proportions des classes n'ont aucune importance. Par contre, dès qu'il y a des erreurs de classification, les proportions des classes dans le set d'apprentissage vont avoir un effet sur le classifieur et les proportions dans le set de test vont influencer les métriques de performance du classifieur. Il peut être intéressant de modifier les proportions relatives des classes pour maximiser certaines métriques comme la précision ou le rappel. Cela va avoir également un effet sur les métriques globales (multiclasses) comme le taux global de reconnaissance.
91
91
92
92
Comme nous l'avons précisé depuis le premier module du cours de SDD III, il faut définir les métriques d'intérêt en fonction de notre objectif final. Souhaite-t-on un classifieur qui commet globalement peu d'erreurs ou bien un classifieur très précis pour une classe particulière ? Et l'erreur pour la classe en question est-elle plus grave si le classifieur rate certains individus (faux négatifs) ou s'il contamine trop la classe prédite (faux positifs) ? C'est à vous en tant qu'expert de le définir.
93
93
94
-
Vous avez à votre disposition le tableau `BreastCancer` du package {mlbench}. Votre objectif est de déterminer si une tumeur du sein est bénigne ou maligne sur base de caractéristiques mesurées sur une biopsie. N'hésitez pas à consulter la page d'aide de ce tableau afin d'en apprendre davantage.
94
+
Vous avez à votre disposition le tableau `BreastCancer` du package {mlbench}. Vous devez déterminer si une tumeur du sein est bénigne ou maligne sur base de caractéristiques récoltées par biopsie. N'hésitez pas à consulter la page d'aide de ce jeu de données pour en apprendre davantage (`?mlbench::BreastCancer`).
95
95
96
96
```{r, echo=TRUE}
97
97
breast <- read("BreastCancer", package = "mlbench")
98
98
breast <- janitor::clean_names(breast)
99
99
```
100
100
101
-
Ce tableau comprend `r nrow(breast)` individus et `r ncol(breast)`.
101
+
Ce jeu de données contient `r nrow(breast)` individus et `r ncol(breast)` variables.
102
102
103
103
```{r, echo=TRUE}
104
104
skimr::skim(breast)
@@ -119,11 +119,11 @@ La répartition entre les tumeurs bénignes et malignes n'est pas homogène dans
119
119
table(breast$class)
120
120
```
121
121
122
-
Les médecins font appel à vous afin de mettre en place un classifieur capable de trouver un maximum de tumeurs malignes sur base des attributs choisis à l'aide d'une classification automatisée sur ordinateur. Ils acceptent que le classifieur se trompe et prédise des faux positifs. Par contre, ils ne souhaitent pas rater de patientes atteintes d'un cancer grave.
122
+
Les médecins font appel à vous pour mettre en place un classifieur capable de trouver un maximum de tumeurs malignes sur base des attributs choisis à l'aide d'une classification automatisée sur ordinateur. Ils acceptent que le classifieur se trompe et prédise des faux positifs. Par contre, ils ne souhaitent pas rater de patientes atteintes d'un cancer grave.
123
123
124
-
Réalisez un premier classifieur utilisant le partitionnement récursif et la validation croisée 5 fois afin d'employer un maximum d'observations. Utilisez une formule condensée. Nommez ce classifieur `breast_part`.
124
+
Réalisez un premier classifieur utilisant le partitionnement récursif et la validation croisée cinq fois afin d'employer un maximum d'observations. Utilisez une formule condensée. Nommez ce classifieur `breast_part`.
125
125
126
-
```{r rpart1_h2, exercise = TRUE}
126
+
```{r rpart1_h2, exercise=TRUE}
127
127
set.seed(12)
128
128
# Création du classifieur
129
129
breast_part <- ml___(data = ___, ___ ~ ___)
@@ -170,25 +170,26 @@ question("Quel est le taux de vrais positifs pour les personnes malades ?",
170
170
Pour rappel, nous avons les effectifs suivants dans les deux classes :
171
171
172
172
```{r, echo=TRUE}
173
-
table(breast$class)
173
+
table(breast$class) |>
174
+
tabularise()
174
175
```
175
176
176
-
À présent, construisez un nouveau classifieur utilisant à nouveau le partitionnement récursif avec une validation croisée 5 fois. Modifiez le set d'apprentissage afin d'avoir 100 tumeurs bénignes et 200 tumeurs malignes afin de réduire l'écart entre les deux.
177
+
À présent, construisez un nouveau classifieur utilisant à nouveau le partitionnement récursif avec une validation croisée cinq fois. Modifiez le set d'apprentissage afin d'avoir 100 tumeurs bénignes et 200 tumeurs malignes pour réduire l'écart entre les deux.
177
178
178
179
```{r split_h2, exercise=TRUE}
179
180
set.seed(34564)
180
181
# Sous-ensemble des tumeurs malignes
181
182
breast %>.%
182
183
filter(., ___ == ___) %>.%
183
-
sample_n(., ___) %->%
184
+
sample_n(., ___) ->
184
185
br_m2
185
186
# Sous-ensemble des tumeurs bénignes
186
187
breast %>.%
187
188
filter(., ___ == ___) %>.%
188
-
sample_n(., ___) %->%
189
+
sample_n(., ___) ->
189
190
br_b2
190
191
# Combinaison des tableaux
191
-
breast2 %<-% bind_rows(___, ___)
192
+
breast2 <- bind_rows(___, ___)
192
193
table(breast2$class)
193
194
```
194
195
@@ -197,15 +198,15 @@ set.seed(34564)
197
198
# Sous-ensemble des tumeurs malignes
198
199
breast %>.%
199
200
filter(., class == ___) %>.%
200
-
sample_n(., ___) %->%
201
+
sample_n(., ___) ->
201
202
br_m2
202
203
# Sous-ensemble des tumeurs bénignes
203
204
breast %>.%
204
205
filter(., class == ___) %>.%
205
-
sample_n(., ___) %->%
206
+
sample_n(., ___) ->
206
207
br_b2
207
208
# Combinaison des tableaux
208
-
breast2 %<-% bind_rows(br_m2, br_b2)
209
+
breast2 <- bind_rows(br_m2, br_b2)
209
210
table(breast2$class)
210
211
211
212
## Attention, le prochain indice est la solution ##
@@ -217,15 +218,15 @@ set.seed(34564)
217
218
# Sous-ensemble des tumeurs malignes
218
219
breast %>.%
219
220
filter(., class == "malignant") %>.%
220
-
sample_n(., 200) %->%
221
+
sample_n(., 200) ->
221
222
br_m2
222
223
# Sous-ensemble des tumeurs bénignes
223
224
breast %>.%
224
225
filter(., class == "benign") %>.%
225
-
sample_n(., 100) %->%
226
+
sample_n(., 100) ->
226
227
br_b2
227
228
# Combinaison des tableaux
228
-
breast2 %<-% bind_rows(br_m2, br_b2)
229
+
breast2 <- bind_rows(br_m2, br_b2)
229
230
table(breast2$class)
230
231
```
231
232
@@ -267,6 +268,7 @@ Si nous considérons que les probabilités d'obtenir une tumeur maligne ou béni
267
268
268
269
Heureusement, il est possible d'indiquer les probabilités *a priori* dans la matrice de confusion `part2_conf`. Ainsi, les métriques seront corrigées en tenant compte de ces probabilités d'avoir l'une ou l'autre tumeur.
269
270
271
+
270
272
```{r prior_h2, exercise=TRUE}
271
273
# Calcul des probabilités a priori
272
274
(breast_prior <- table(___$___) / nrow(___))
@@ -319,13 +321,13 @@ quiz(
319
321
submit_button = "Soumettre une réponse",
320
322
try_again_button = "Resoumettre une réponse",
321
323
incorrect = "Mauvaise réponse. Recommencez et analysez plus finement les métriques associés aux classifieurs.",
322
-
correct = "Vous pouvez observer que la modification des proportions a permis d'augmenter grandement le rappel. Cependant, nous observons une perte de précision. Les médecins vont préférer détecter un maximum des tumeurs malignes, quitte à avoir un peu plus de faux positifs dans le lot qu'ils démasqueront via des analyses plus poussées sur le sous-ensemble ainsi obtenu.")
324
+
correct = "Vous pouvez observer que la modification des proportions a permis d'augmenter grandement le rappel. Cependant, nous observons une perte de précision. Les médecins vont préférer détecter un maximum des tumeurs malignes, quitte à avoir un peu plus de faux positifs dans le lot qu'ils démasqueront via des analyses plus poussées sur les patientes déclarés positifs.")
323
325
)
324
326
```
325
327
326
328
## Courbes ROC
327
329
328
-
Dans la section précédente, nous avons modifié les proportions relatives dans les classes pour modifier les performances de notre classifieur (rappel *versus* précision). Il est possible de modifier aussi le seuil de détection. La courbe ROC permet d'étudier tous les seuils de détection pour un classifieur à deux classes. Cette vue d'ensemble est particulièrement utile si l'on ne connait pas les probabilités *a priori*, ou si celles-ci peuvent varier grandement. Une comparaison des classifieurs sur base des courbes ROC permet alors de choisir le meilleur dans les différents cas de figure qui peuvent se présenter.
330
+
Dans la section précédente, nous avons altéré les proportions relatives dans les classes pour modifier les performances de notre classifieur (rappel *versus* précision). Il est possible de modifier aussi le seuil de détection. La courbe ROC permet d'étudier tous les seuils de détection pour un classifieur binaire. Cette vue d'ensemble est particulièrement utile si l'on ne connait pas les probabilités *a priori*, ou si celles-ci peuvent varier grandement. Une comparaison des classifieurs sur base des courbes ROC permet alors de choisir le meilleur dans les différents cas de figure qui peuvent se présenter.
329
331
330
332
```{r, echo=TRUE}
331
333
set.seed(875467)
@@ -335,7 +337,7 @@ head(breast_pred)
335
337
336
338
Réalisez en R de base le graphique de la courbe ROC. Vous devez commencer par formater les prédictions pour ROCR et nommer cet objet `pred_obj`. Ensuite, vous devez calculer les performances de votre `pred_obj` et le nommer `perf`. Déterminer les taux de vrais positifs (`tpr`) et le taux de faux positifs (`fpr`).
grade_code("Bien joué ! Vous avez déterminé la valeur de l'aire sous la courbe ROC.")
391
+
grade_code("Vous avez déterminé la valeur de l'aire sous la courbe ROC pour votre classifieur.")
390
392
```
391
393
392
394
## Conclusion
393
395
394
-
Vous venez de découvrir l'effet des proportions par classes sur le set d'apprentissage, la correction des métriques en renseignant la probabilité *a priori* et les courbes ROC. Tous ces outils vous seront iben utiles pour optimiser votre classifieur par rapport au problème rencontré.
396
+
Vous venez d'explorer l'effet des proportions par classes sur un classifieur et sur les métriques de perfomance de ce classifieur. Vous avez aussi corrigé vos métriques en renseignant la probabilité *a priori*. Enfin, vous avez tracé une courbe ROC et calculé son aire sous la courbe, AUC. Tous ces outils vous seront bien utiles pour optimiser vos propres classifieurs.
0 commit comments