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
Ce tutoriel doit encore être écrit. Vous devez probablement penser à installer une version plus récente du package qui contient les exercices finalisés !
82
+
83
+
Un classifieur qui ne commet pas d'erreur. Ce n'est pas réaliste (ou très très peu probable). Les métriques sont calculées sur base d'une matrice de confusion qui dénombre les vrais positifs, les faux positifs, les vrais négatifs et les faux négatifs. Ces métriques permettent d'évaluer la qualité d'un classifieur. Le nombre d'items dans chaque groupe de la variable à prédire va donc influencer ces métriques. Ce tutoriel s'intéresse tout d'abord à l'effet de proportions.
84
+
85
+
Un autre manière d'influencer notre classifueur va être de modifieur le seuil de détection. Etudier 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.
36
86
37
87
## Effet des proportions sur les métriques
38
88
39
-
TODO: ce tutoriel doit encore être écrit. Vous devez probablement penser à installer une version plus récente du package qui contient les exercices finalisés !
89
+
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 sur la qualité du classifieur que l'on détermine à l'aide des métriques. 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 dans 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 généralement pour effet de réduire le taux de précision global.
90
+
91
+
Comme nous l'avons précisez depuis le premier module du cours de SDD III, il faut définir les métriques d'intérêt en fonction de la problématique que l'on étudie. Souhaite-t-on un classifieur qui commet globalement peu d'erreurs ou bien un classifieur très précis pour une classe particulière ? C'est à vous en tant qu'expert de le définir.
92
+
93
+
Vous avez à votre disposition le tableau `BreastCancer` du package {mlbench}. N'hésitez pas à consulter la page d'aide de ce tableau afin d'en apprendre davantage.
94
+
95
+
```{r, echo = TRUE}
96
+
breast <- read("BreastCancer", package = "mlbench")
97
+
breast <- janitor::clean_names(breast)
98
+
```
99
+
100
+
Ce tableau comprend `r nrow(breast)` individus et `r ncol(breast)`.
101
+
102
+
```{r, echo = TRUE}
103
+
skimr::skim(breast)
104
+
```
105
+
106
+
Quelques lignes du tableau de données sont éliminées afin de se débarrasser des valeurs manquantes dans le tableau. La variable `id` est également éliminée. Elle n'est pas utile dans notre analyse.
107
+
108
+
```{r, echo=TRUE}
109
+
# élimination des valeurs manquantes.
110
+
breast <- na_omit(breast, "bare_nuclei")
111
+
# Suppression de la colonne id
112
+
breast <- sselect(breast, -id)
113
+
```
114
+
115
+
La répartition entre les patients atteints d'une tumeur bénigne et maligne n'est pas homogène dans ce tableau.
116
+
117
+
```{r}
118
+
table(breast$class)
119
+
```
120
+
121
+
Les médecins font appel à vous afin de mettre en place un classifieur capable de trouver un maximum de personne atteint d'une tumeur maligne.
122
+
123
+
Ils acceptent que le classifieur se trompe et prédisent des faux positifs. Par contre, ils ne souhaitent pas rater de patients malades.
124
+
125
+
Réalisez un premier classifieur utilisant le partitionnement récursif et la validation croisée 5 fois afin d'employer un maximum d'observations. Nommez ce classifieur `breast_part`.
incorrect = "Mauvaise réponse. Recommencez et analysez plus finement les métriques associés à ce classifieur.",
167
+
correct = "Bravo, c'est correct !")
168
+
```
169
+
170
+
À présent, proposez un nouveau classifieur utilisant à nouveau le partitionnement récursif avec une validation croisée 5 fois. Modifiez le set d'apprentissage afin d'avoir 200 patients malades et 100 patients sains.
171
+
172
+
```{r split_h2, exercise = TRUE}
173
+
set.seed(12)
174
+
# sous ensemble des personnes malades
175
+
breast %>.%
176
+
filter(., ___ == ___) %>.%
177
+
sample_n(., ___) %->% br_m2
178
+
# sous ensemble des personnes saines
179
+
breast %>.%
180
+
filter(., ___ == ___) %>.%
181
+
sample_n(., ___) %->% br_b2
182
+
# Combinaison des tableaux
183
+
breast2 %<-% bind_rows(___, ___)
184
+
table(breast2$class)
185
+
```
186
+
187
+
```{r split_h2-hint-1}
188
+
set.seed(12)
189
+
# sous ensemble des personnes malades
190
+
breast %>.%
191
+
filter(., class == ___) %>.%
192
+
sample_n(., ___) %->% br_m2
193
+
# sous ensemble des personnes saines
194
+
breast %>.%
195
+
filter(., class == ___) %>.%
196
+
sample_n(., ___) %->% br_b2
197
+
# Combinaison des tableaux
198
+
breast2 %<-% bind_rows(br_m2, br_b2)
199
+
table(breast2$class)
200
+
201
+
## Attention, le prochain indice est la solution ##
202
+
```
203
+
204
+
```{r split_h2-solution}
205
+
set.seed(12)
206
+
# sous ensemble des personnes malades
207
+
breast %>.%
208
+
filter(., class == "malignant") %>.%
209
+
sample_n(., 200) %->% br_m2
210
+
# sous ensemble des personnes saines
211
+
breast %>.%
212
+
filter(., class == "benign") %>.%
213
+
sample_n(., 100) %->% br_b2
214
+
# Combinaison des tableaux
215
+
breast2 %<-% bind_rows(br_m2, br_b2)
216
+
table(breast2$class)
217
+
```
218
+
219
+
```{r split_h2-check}
220
+
grade_code("Bien joué ! Vous avez divisé en deux sous ensembles puis vous avez recombiné ces sous ensembles.")
grade_code("Bravo ! Vous venez de réalsier et d'évaluer le second classifieur.")
253
+
```
254
+
255
+
Définissez les probabilités *a priori* et corrigez la matrice de confusion. Vous avez calculé la matrice de confusion précédemment et l'avez nommée `part2_conf`.
incorrect = "Mauvaise réponse. Recommencez et analysez plus finement les métriques associés aux classifieurs.",
314
+
correct = "Bravo, c'est correct ! Vous pouvez observer que la modification des proportions a permis d'augmenter grandement le taux de vrais positifs. Cependant, nous observons une perte de précision. Les médecins vont préférer détecter un maximum de personnes malades avec quelques faux positifs.")
315
+
)
316
+
```
40
317
41
318
## courbes ROC
42
319
43
-
...
320
+
Dans la section précédente, nous avons employé les proportions relatives afin de modifier les performances de notre classifieur (rappel VS précision). Il est possible de modifier le seuil de détection. La courbe ROC permet d'étudier tous les seuils de détection pour un classifieur à deux classes.
321
+
322
+
Outre la variation des proportions relatives des individus dans le set d'apprentissage, nous pouvons aussi faire varier les performances de notre classifieur entre rappel et précision en modifiant le seuil de détection.
323
+
324
+
```{r, echo=TRUE}
325
+
set.seed(12)
326
+
breast_pred <- cvpredict(breast_part, cv.k = 5, type = "membership")
327
+
head(breast_pred)
328
+
```
329
+
330
+
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.")
385
+
```
386
+
387
+
## Conclusion
388
+
389
+
Bien joué ! Vous venez de découvrir l'effet des proportions sur le set d'apprentissage et la courbe ROC. Votre boite à outils s'étoffe de module en module. En plus de choisir un modèle pour votre classifieur, vous apprenez à l'optimiser.
390
+
391
+
```{r comm_noscore, echo=FALSE}
392
+
question_text(
393
+
"Laissez-nous vos impressions sur cet outil pédagogique",
394
+
answer("", TRUE, message = "Pas de commentaires... C'est bien aussi."),
0 commit comments