Skip to content

Commit 283f13b

Browse files
committed
Module 1 learnrs revised
1 parent b47e6b9 commit 283f13b

File tree

7 files changed

+174
-179
lines changed

7 files changed

+174
-179
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Package: BioDataScience3
2-
Version: 2022.1.0
2+
Version: 2022.2.0
33
Title: A Series of Learnr Documents for Biological Data Science 3
44
Description: Interactive documents using learnr for studying biological data science (second course).
55
Authors@R: c(

NEWS.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# BioDataScience3 2022.2.0
2+
3+
- **C00La_rappel** renamed **C00La_refresh** and also totally reworked. Also includes explanations about changes between svbox2021 and svbox2022.
4+
5+
- **C01La_confusion** and **C01Lb_ml1** revised.
6+
17
# BioDataScience3 2022.1.0
28

39
- All learnr exercices adapted and tested with svbox2022.

inst/tutorials/C00La_refresh/C00La_refresh.Rmd

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
---
22
title: "Rappel de SDD I et II"
33
author: "Guyliann Engels & Philippe Grosjean"
4-
description: "**SDD III Module 0** Rappel des notions importantes des cours SDD I et II."
4+
description: "**SDD III** Rappel des cours SDD I et II et nouveautés svbox2022."
55
tutorial:
66
id: "C00La_refresh"
7-
version: 2.0.1/15
7+
version: 2.0.2/14
88
output:
99
learnr::tutorial:
1010
progressive: true
@@ -186,7 +186,7 @@ chart(data = crabs, length ~ width %col=% sex | species) +
186186

187187
Il n'est pas aisé de se souvenir du nom de chaque fonction que l'on peut employer avec `chart()` ou avec `ggplot()`. Nous vous proposons pour ce faire une syntaxe alternative. La fonction `gg$` associée au pipe natif de R `|>` permet d'obtenir une liste de toutes les fonctions disponibles que l'on peut ajouter au graphique. Le pipe `|>` va remplacer le `+` et on ajoute avant `geom_point()` l'instruction. `gg$`
188188

189-
```{r, echo = TRUE}
189+
```{r, echo=TRUE}
190190
chart(data = crabs, length ~ width %col=% sex | species) |>
191191
gg$geom_point()
192192
```
@@ -296,7 +296,7 @@ L'utilisation d'objets **data.table** requiert quelques modifications présenté
296296

297297
- Soit vous utilisez une autre famille de fonctions, appelées "speedy" et qui portent le même nom que les fonctions "tidy" et avec une syntaxe similaire la plupart du temps, mais préfixées d'un "s"? comme `sselect()`, `smutate()`, `sgroup_by()`, `ssummarise()`...
298298

299-
```{r, echo = TRUE, eval = FALSE}
299+
```{r, echo=TRUE, eval=FALSE}
300300
# Assignation classique avec fonctions "speedy" => version conseillée
301301
crabs1 <- sselect(crabs, species, sex, length)
302302
# Assignation alternative avec fonctions "tidy"
@@ -494,7 +494,7 @@ crabs <- read("crabs", package = "MASS", lang = "fr")
494494
crabs2 <- smutate(crabs, depth_len5 = (depth/length)^5)
495495
```
496496

497-
```{r anova_h3, exercise = TRUE, exercise.setup = "anova_prep"}
497+
```{r anova_h3, exercise=TRUE, exercise.setup="anova_prep"}
498498
# Réalisation de l'ANOVA
499499
anova(crabs_lm <- lm(data = ___, ___ ~ ___))
500500
# Vérification de l'homoscédasticité
@@ -644,7 +644,7 @@ chart$scores(crabs_pca)
644644

645645
Dans un cas comme celui-ci, il est possible d'analyser plus en détail au delà de cet effet saturant, mais pour cela, il faut l'éliminer d'abord. Une façon de faire consiste à diviser chaque variable numérique par l'une d'entre elles que l'on considère comme plus représentative de l'effet saturant. Ici, c'est la taille globale des crabes, et nous pouvons utiliser, par exemple, la largueur de la carapace `width` comme référence. Faites cette transformation.
646646

647-
```{r acp_h3, exercise = TRUE}
647+
```{r acp_h3, exercise=TRUE}
648648
# Calcul des nouvelles variables
649649
crabs_w <- smutate(___, front_w = ___/___, length_w = ___/___,
650650
rear_w = ___/___, depth_w = ___/___, sp_sex = paste0(species, sex))
@@ -701,7 +701,7 @@ crabs_w <- smutate(crabs, front_w = front/width, length_w = length/width,
701701
crabs_w_pca <- pca(data = crabs_w, ~ front_w + length_w + rear_w + depth_w)
702702
```
703703

704-
```{r acp_graph_h2, exercise = TRUE, exercise.setup = "crabs_acp_prep"}
704+
```{r acp_graph_h2, exercise=TRUE, exercise.setup="crabs_acp_prep"}
705705
# Graphique des éboulis
706706
chart$___(___)
707707
# Représentation dans l’espace des variables

inst/tutorials/C01La_confusion/C01La_confusion.Rmd

Lines changed: 78 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
---
22
title: "Matrices de confusion"
33
author: "Guyliann Engels & Philippe Grosjean"
4-
description: "**SDD III Module 1** Matrices de confusion et métriques qui en découlent."
4+
description: "**SDD III Module 1** Matrices de confusion et métriques."
55
tutorial:
66
id: "C01La_confusion"
7-
version: 2.1.0/5
7+
version: 2.1.1/5
88
output:
99
learnr::tutorial:
1010
progressive: true
@@ -29,42 +29,37 @@ BioDataScience3::learnr_server(input, output, session)
2929

3030
## Objectifs
3131

32-
Il est possible de créer une multitude de classifieurs. Afin de déterminer le classifieur le plus adapté, nous avons besoin d'évaluer sa qualité. L'approche la plus adaptée est d'employer des métriques comme le taux de reconnaissance globale, la précision, le rappel.... Ces métriques se calculent sur base d'une matrice de confusion. Ces métriques sont également employées afin de comparer les classifieurs entre eux.
32+
Il est possible de créer une multitude de classifieurs différents à partir d'un même jeu de données. Afin de déterminer le classifieur le plus adapté, nous avons besoin d'évaluer la qualité de chacun d'eux. Pour ce faire, nous utilisons des métriques comme le taux de reconnaissance globale, la précision, le rappel.... Ces métriques se calculent sur base d'une matrice de confusion.
3333

34-
Ce tutoriel a pour objectif
34+
Ce tutoriel a pour objectifs :
3535

36-
- Choisir la bonne métrique
37-
- Appréhender les matrices de confusion.
38-
- Appréhender les principales métriques grâce aux calculs à la main de ces dernières à partir d'une matrice de confusion 2 x 2.
36+
- Apprendre à choisir la bonne métrique
37+
- Appréhender les matrices de confusion
38+
- Calculer les principales métriques à partir d'une matrice de confusion 2 x 2
3939

4040
## Choix des métriques
4141

4242
```{r qu_metrics}
43-
#question("Quelle est la métrique la plus adpatée afin de déterminer le nombre d'items d'intéret trouvé parmi l'ensemble des items ?",
44-
# answer("Rappel", correct = TRUE),
45-
# answer("Spécificité"),
46-
# answer("Taux de faux positifs"),
47-
# answer("Précision"),
48-
# answer("Score F"),
49-
# answer("Rappel"),
50-
# allow_retry = TRUE, random_answer_order = TRUE,
51-
#)
52-
53-
question("Quelle est la métrique la plus adpatée afin de mettre en avant le nombre d'items d'intéret trouvé parmi l'ensemble des items ?",
54-
answer("Rappel", correct = TRUE, message = "Le rappel permet de connaitre quelle est la fraction de classe X trouvé par l'ordinatuer parmi l'ensemble des items."),
55-
answer("Précision", message = "La précision permet de connaitre quelle est la fraction effectivement de classe X que l’ordinateur a classé comme X ?"),
56-
answer("Spécificité", message = "La spécificité est l'opposé du rappel. On s'intéresse à la vrai négatif."),
57-
answer("Score F", message = "Il s'agit d'une métrique qui combine la précision et le rappel."),
58-
allow_retry = TRUE, random_answer_order = TRUE,
59-
correct = "Bravo ! Vous avez trouvé la métrique la plus adaptée.",
43+
question("Quelle est la métrique la plus adaptée pour s'assurer que le classifieur trouve un maximum d'items d'une classe donnée ?",
44+
answer("Rappel", correct = TRUE,
45+
message = "Le rappel permet de connaitre quelle est la fraction de classe X trouvée par l'ordinateur parmi l'ensemble des items appartenant effectivement à cette classe."),
46+
answer("Précision",
47+
message = "La précision permet de connaitre quelle est la fraction que l'ordinateur a classé comme X et qui appartient effectivement à cette classe."),
48+
answer("Spécificité",
49+
message = "La spécificité est l'opposé du rappel. On s'intéresse aux vrais négatifs, donc, les items non classés comme X et qui n'en sont pas."),
50+
answer("Score F",
51+
message = "Il s'agit d'une métrique qui combine la précision et le rappel."),
52+
allow_retry = TRUE,
53+
random_answer_order = TRUE,
54+
correct = "Vous avez trouvé la métrique la plus adaptée.",
6055
incorrect = "Attention, Ce n'est pas la bonne métrique.",
6156
submit_button = "Soumettre une réponse",
6257
try_again_button = "Resoumettre une réponse")
6358
```
6459

65-
## Le taux de reconnaissance global
60+
## Taux de reconnaissance global
6661

67-
Ces métriques peuvent sembler abstraites. En effectuant un exemple à la main, on peut les appréhender plus facilement. Intéressez-vous pour débuter au taux de reconnaissance globale.
62+
Ces métriques peuvent sembler abstraites. En les calculant à la main, on peut les appréhender plus facilement. Intéressez-vous, pour débuter, au taux de reconnaissance globale.
6863

6964
```{r, echo=FALSE, message=FALSE}
7065
mconf <- dtf(
@@ -75,26 +70,26 @@ rownames(mconf) <- c("A", "B", "C")
7570
knitr::kable(mconf, caption = "Matrice de confusion dont les colonnes représentent la classification par ordinateur et les lignes la classification manuelle.")
7671
```
7772

78-
Sur base de la matrice de confusion fictive ci-dessus, calculez le taux de reconnaissance global du groupe B. Il s'agit de la première étape. Il faut définir les vrais positifs, les faux positifs, les faux négatifs et les vrais négatifs. Ensuite, il faut ensuite calculer la métrique d'intérêt.
73+
Sur base de la matrice de confusion fictive ci-dessus, calculez le taux de reconnaissance global du groupe B. Il s'agit de la première étape. Il faut définir les vrais positifs, les faux positifs, les faux négatifs et les vrais négatifs. Ensuite, il faut calculer la métrique d'intérêt.
7974

80-
```{r conf1_h2, exercise = TRUE}
81-
tp <- ___ # TRUE POSITIVE, vrai positif
82-
fp <- ___ # FALSE POSITIVE, faux positif
83-
fn <- ___ # FALSE NEGATIVE, faux négatif
84-
tn <- ___ # TRUE NEGATIVE, vrai négatif
85-
# calcul de la métrique
86-
conf <- ___
87-
conf
75+
```{r conf1_h2, exercise=TRUE}
76+
tp <- ___ # vrai positif
77+
fp <- ___ # faux positif
78+
fn <- ___ # faux négatif
79+
tn <- ___ # vrai négatif
80+
# Calcul de la métrique
81+
acc <- ___
82+
acc
8883
```
8984

9085
```{r conf1_h2-hint-1}
9186
tp <- 160
9287
fp <- 90
9388
fn <- 80
9489
tn <- 440
95-
# calcul de la métrique
96-
conf <- ___
97-
conf
90+
# Calcul de la métrique
91+
acc <- ___
92+
acc
9893
## Attention, le prochain indice est la solution ##
9994
```
10095

@@ -104,9 +99,9 @@ tp <- 160
10499
fp <- 90
105100
fn <- 80
106101
tn <- 440
107-
# calcul de la métrique
108-
conf <- (tp + tn) / (tp + fp + fn + tn)
109-
conf
102+
# Calcul de la métrique
103+
acc <- (tp + tn) / (tp + fp + fn + tn)
104+
acc
110105
```
111106

112107
```{r conf1_h2-check}
@@ -116,13 +111,13 @@ conf
116111
# )
117112
#)
118113
grade_result(
119-
pass_if(~ identical(.result, ((160+440)/(160+90+80+440)))),
120-
correct = "Bien joué, c'est la somme des vrais positifs et négatifs sur le total général.",
121-
incorrect = "Révise la formule mathématique de taux de reconnaissance"
114+
pass_if(~ identical(.result, ((160 + 440) / (160 + 90 + 80 + 440)))),
115+
correct = "C'est la somme des vrais positifs et négatifs sur le total général (en d'autres termes, la somme de la diagonale sur le total général).",
116+
incorrect = "Révisez la formule mathématique qui permet de calculer le taux de reconnaissance global."
122117
)
123118
```
124119

125-
## Le taux de vrai positif
120+
## Taux de vrais positifs
126121

127122
```{r, echo=FALSE, message=FALSE}
128123
mconf <- dtf(
@@ -133,26 +128,26 @@ rownames(mconf) <- c("A", "B", "C")
133128
knitr::kable(mconf, caption = "Matrice de confusion dont les colonnes représentent la classification par ordinateur et les lignes la classification manuelle.")
134129
```
135130

136-
Sur base de cette nouvelle matrice de confusion ci-dessus, calculez le **taux de vrais positifs** du groupe C.
131+
Sur base de la nouvelle matrice de confusion ci-dessus, calculez le **taux de vrais positifs** du groupe C.
137132

138133
```{r conf2_h2, exercise = TRUE}
139134
tp <- ___
140135
fp <- ___
141136
fn <- ___
142137
tn <- ___
143-
# calcul de la métrique
144-
conf <- ___
145-
conf
138+
# Calcul de la métrique
139+
tpr <- ___
140+
tpr
146141
```
147142

148143
```{r conf2_h2-hint-1}
149144
tp <- 140
150145
fp <- 10
151146
fn <- 100
152147
tn <- 190
153-
# calcul de la métrique
154-
conf <- ___
155-
conf
148+
# Calcul de la métrique
149+
tpr <- ___
150+
tpr
156151
## Attention, le prochain indice est la solution ##
157152
```
158153

@@ -162,18 +157,19 @@ tp <- 140
162157
fp <- 10
163158
fn <- 100
164159
tn <- 190
165-
# calcul de la métrique
166-
conf <- tp / (tp + fn)
167-
conf
160+
# Calcul de la métrique
161+
tpr <- tp / (tp + fn)
162+
tpr
168163
```
169164

170165
```{r conf2_h2-check}
171166
grade_result(
172-
pass_if(~ identical(.result, (140/(140 + 100))), "La référence est l'ensemble des positifs, soit les vrais positifs, mais aussi les faux négatifs.")
167+
pass_if(~ identical(.result, (140 / (140 + 100))),
168+
"La référence est l'ensemble des positifs, soit les vrais positifs, mais aussi les faux négatifs.")
173169
)
174170
```
175171

176-
## La spécificité
172+
## Spécificité
177173

178174
```{r, echo=FALSE, message=FALSE}
179175
mconf <- dtf(
@@ -184,26 +180,26 @@ rownames(mconf) <- c("A", "B", "C")
184180
knitr::kable(mconf, caption = "Matrice de confusion dont les colonnes représentent la classification par ordinateur et les lignes la classification manuelle.")
185181
```
186182

187-
Sur base de cette matrice de confusion ci-dessus, calculez la **spécificité** du groupe A.
183+
Sur base de la matrice de confusion ci-dessus, calculez la **spécificité** du groupe A.
188184

189185
```{r conf3_h2, exercise = TRUE}
190186
tp <- ___
191187
fp <- ___
192188
fn <- ___
193189
tn <- ___
194-
# calcul de la métrique
195-
conf <- ___
196-
conf
190+
# Calcul de la métrique
191+
specif <- ___
192+
specif
197193
```
198194

199195
```{r conf3_h2-hint-1}
200196
tp <- 90
201197
fp <- 50
202198
fn <- 0
203199
tn <- 300
204-
# calcul de la métrique
205-
conf <- ___
206-
conf
200+
# Calcul de la métrique
201+
specif <- ___
202+
specif
207203
## Attention, le prochain indice est la solution ##
208204
```
209205

@@ -213,18 +209,19 @@ tp <- 90
213209
fp <- 50
214210
fn <- 0
215211
tn <- 300
216-
# calcul de la métrique
217-
conf <- tn / (tn + fp)
218-
conf
212+
# Calcul de la métrique
213+
specif <- tn / (tn + fp)
214+
specif
219215
```
220216

221217
```{r conf3_h2-check}
222218
grade_result(
223-
pass_if(~ identical(.result, (300/(300 + 50))), "À l'inverse ici, on considère comme référence l'ensemble des négatifs qui ne sont pas du groupe A, donc les vrais négatifs mais aussi les faux positifs.")
219+
pass_if(~ identical(.result, (300 / (300 + 50))),
220+
"À l'inverse ici, on considère comme référence l'ensemble des négatifs, donc ceux qui ne sont pas du groupe A, c'est-à-dire les vrais négatifs additionnés des faux positifs.")
224221
)
225222
```
226223

227-
## La précision
224+
## Précision
228225

229226
```{r, echo=FALSE, message=FALSE}
230227
mconf <- dtf(
@@ -242,19 +239,19 @@ tp <- ___
242239
fp <- ___
243240
fn <- ___
244241
tn <- ___
245-
# calcul de la métrique
246-
conf <- ___
247-
conf
242+
# Calcul de la métrique
243+
prec <- ___
244+
prec
248245
```
249246

250247
```{r conf4_h2-hint-1}
251248
tp <- 10
252249
fp <- 150
253250
fn <- 30
254251
tn <- 260
255-
# calcul de la métrique
256-
conf <- ___
257-
conf
252+
# Calcul de la métrique
253+
prec <- ___
254+
prec
258255
## Attention, le prochain indice est la solution ##
259256
```
260257

@@ -264,20 +261,21 @@ tp <- 10
264261
fp <- 150
265262
fn <- 30
266263
tn <- 260
267-
# calcul de la métrique
268-
conf <- tp / (tp + fp)
269-
conf
264+
# Calcul de la métrique
265+
prec <- tp / (tp + fp)
266+
prec
270267
```
271268

272269
```{r conf4_h2-check}
273270
grade_result(
274-
pass_if(~ identical(.result, (10/(10+150))), "Ne pas se tromper car cette fois la référence est l'ensemble des items classés par l'ordinateur comme B, soit les vrais et les faux positifs.")
271+
pass_if(~ identical(.result, (10 / (10 + 150))),
272+
"Ne pas se tromper car cette fois la référence est l'ensemble des items classés par l'ordinateur comme B, soit les vrais et les faux positifs.")
275273
)
276274
```
277275

278276
## Conclusion
279277

280-
Même si la réalisation de ces calculs de métrique peut vous sembler simpliste. Ils vous ont permis d'appréhender un peu mieux ces métriques qui sont des éléments cruciaux dans la mise en place d'un classifieur. À chaque fois que vous devrez étudier la qualité d'un classifieur, débuter par définir les métriques les plus pertinentes.
278+
Ces calculs de métriques à la main peut vous sembler simpliste. Ils vous ont permis d'appréhender un peu mieux ces métriques qui sont des éléments cruciaux dans l'évaluation d'un classifieur. À chaque fois que vous devrez étudier la qualité d'un classifieur, commencez par définir les métriques les plus pertinentes par rapport à vos objectifs.
281279

282280
```{r comm_noscore, echo=FALSE}
283281
question_text(

0 commit comments

Comments
 (0)