Skip to content

Commit c48f81f

Browse files
first version of C03Lb_ml3
1 parent 907ea08 commit c48f81f

File tree

1 file changed

+189
-5
lines changed

1 file changed

+189
-5
lines changed

inst/tutorials/C03Lb_ml3/C03Lb_ml3.Rmd

Lines changed: 189 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ author: "Guyliann Engels & Philippe Grosjean"
44
description: "**SDD III Module 3** Machines à vecteurs supports et réseaux de neurones."
55
tutorial:
66
id: "C03Lb_ml3"
7-
version: 2.0.0/0
7+
version: 2.0.0/4
88
output:
99
learnr::tutorial:
1010
progressive: true
@@ -17,7 +17,30 @@ BioDataScience3::learnr_setup()
1717
SciViews::R()
1818
library(mlearning)
1919
20-
# ...
20+
# datasets
21+
dermatology <- read("dermatology", package= "BioDataScience3")
22+
derma <- sselect(dermatology, c(1:11, 34:35))
23+
derma <- na_omit(derma, cols = "age")
24+
25+
# quizz
26+
set.seed(960412)
27+
## Classifieur
28+
# Machine à vecteurs supports
29+
derma_svmr <- mlSvm(data = derma, class~.)
30+
# Machine à vecteurs supports avec un noyau linéaire
31+
derma_svml <- mlSvm(data = derma, class~., kernel = "linear")
32+
# Réseaux de neurones artificiels
33+
derma_nnet <- mlNnet(data = derma, class~.)
34+
## Métriques
35+
# Machine à vecteurs supports
36+
cvpredict(derma_svmr, cv.k = 5) |> confusion(derma$class) |> summary() ->
37+
svmr_tab
38+
# Machine à vecteurs supports avec un noyau linéaire
39+
cvpredict(derma_svml, cv.k = 5) |> confusion(derma$class) |> summary() ->
40+
svml_tab
41+
# Réseaux de neurones artificiels
42+
cvpredict(derma_nnet, cv.k = 5) |> confusion(derma$class) |> summary() ->
43+
nnet_tab
2144
```
2245

2346
```{r, echo=FALSE}
@@ -32,8 +55,169 @@ BioDataScience3::learnr_server(input, output, session)
3255

3356
## Objectifs
3457

35-
- ...
58+
Ce tutoriel a pour objectif de vous faire découvrir 2 nouvelles méthodes qui vont s'ajouter à l'analyse discriminante linéaire, les K plus proches voisins, le partitionnement récursif et la forêt aléatoire. Les méthodes sont la machine à vecteurs supports et le réseaux de neurones artificiels.
59+
60+
Ces deux nouvelles méthodes sont disponible dans le package {mlearning}
61+
62+
| **Méthode** | **Fonction** |
63+
|---------------------------------|------------------------------|
64+
| Analyse discriminante linéaire | mlLda(data, formula,...) |
65+
| K plus proches voisins | mlKnn(data, formula,...) |
66+
| Partitionnement récursif | mlRpart(data, formula,...) |
67+
| Foret aléatoire | mlRforest(data, formula,...) |
68+
| Machine à vecteurs supports | mlSvm(data, formula,...) |
69+
| Réseaux de neurones artificiels | mlNnet(data, formula,...) |
70+
71+
## Discrimination de maladie de la peau.
72+
73+
Discriminer des maladies de la peau n'est pas une tache aisée pour les dermatologue. Plusieurs maladies peuvent avoir des symptômes similaires. Aidez ces médecins à mettre en place un classifieur pouvant les aider à distinguer une maladie sur base de 12 variables cliniques.
74+
75+
Vous avez à votre disposition le tableau `derma`.
76+
77+
```{r, echo = TRUE}
78+
dermatology <- read("dermatology", package= "BioDataScience3")
79+
```
80+
81+
Ce tableau comprend 12 variables obtenues par des observations directes du médécin et 22 requièrent un prélèvement pour être étudier à l'aide de méthode histoplogiques.
82+
83+
```{r}
84+
skimr::skim(dermatology)
85+
```
86+
87+
Ce jeu de données comprends 8 valeurs manquantes pour la variable age. La variable `class` reprend les 6 niveaux que vous allez devoir prédire avec vos classifieurs. La différentes maladies ne sont pas distribuées de manière homogène dans le tableau de données.
88+
89+
La variable `family_history` peut prendre soit la valeur de 0 (aucune maladie de la peau dans la famille), soit la valeur de 1 (maladie présente dans la famille.) Les autres attributs peuvent prendre 4 valeurs allant de 0 (absence), 1, 2 et 3 (très important).
3690

37-
## Classification supervisée avec ...
91+
Tentez de mettre en place un classifieur n'utilisant que les observations cliniques. Sélectionnez les variables 1 à 11 et 34 à 35. Utilisez la fonction `sselect()`. Filtrez ensuite les individus contenant des valeurs manquantes avec la fonction na_omit().
92+
93+
```{r derma_h2, exercise= TRUE}
94+
# Selection des varaibles d'intérêts
95+
derma <- sselect(___, c(___:___, ___:___))
96+
# Elimination des NA
97+
___ <- na_omit(___, cols = ___)
98+
```
99+
100+
```{r derma_h2-hint-1}
101+
# Selection des varaibles d'intérêts
102+
derma <- sselect(dermatology, c(___:___, ___:___))
103+
# Elimination des NA
104+
derma <- na_omit(derma, cols = ___)
105+
```
106+
107+
```{r derma_h2-solution}
108+
# Selection des varaibles d'intérêts
109+
derma <- sselect(dermatology, c(1:11, 34:35))
110+
# Elimination des NA
111+
derma <- na_omit(derma, cols = "age")
112+
```
113+
114+
```{r derma_h2-check}
115+
grade_code("Bien joué ! Le remaniement des données n'a plus de secret pour vous.")
116+
```
117+
118+
C'est à vous d'explorer ce tableau. Vous avez la possibilité de réaliser tous les analyses et graphiques que vous désirez.
119+
120+
```{r explo_noscor, exercise=TRUE}
121+
122+
```
38123

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 !
124+
## Création des classifieurs
125+
126+
Créez à présent trois classifieurs utilisant la machine à vecteurs supports avec un noyau radial, la machine à vecteurs supports avec un noyeau linéaire et le réseaux de neurones artificiels. Utilisez le tableau `derma` et prédisez la variable `class`.
127+
128+
```{r, classif_h2, exercise = TRUE}
129+
set.seed(960412)
130+
# Machine à vecteurs supports
131+
derma_svmr <- mlSvm(data = ___, ___~___)
132+
# Machine à vecteurs supports avec un noyau linéaire
133+
derma_svml <- mlSvm(data = ___, ___~___, ___ = "linear")
134+
# Réseaux de neurones artificiels
135+
derma_nnet <- mlNnet(data = ___, ___~___)
136+
```
137+
138+
```{r, classif_h2-hint-1}
139+
set.seed(960412)
140+
# Machine à vecteurs supports
141+
derma_svmr <- mlSvm(data = derma, ___~___)
142+
# Machine à vecteurs supports avec un noyau linéaire
143+
derma_svml <- mlSvm(data = ___, ___~___, kernel = "linear")
144+
# Réseaux de neurones artificiels
145+
derma_nnet <- mlNnet(data = ___, ___~___)
146+
```
147+
148+
```{r, classif_h2-solution}
149+
set.seed(960412)
150+
# Machine à vecteurs supports
151+
derma_svmr <- mlSvm(data = derma, class~.)
152+
# Machine à vecteurs supports avec un noyau linéaire
153+
derma_svml <- mlSvm(data = derma, class~., kernel = "linear")
154+
# Réseaux de neurones artificiels
155+
derma_nnet <- mlNnet(data = derma, class~.)
156+
```
157+
158+
Evaluer les performances de vos trois classifieurs par validation croisée 5 fois.
159+
160+
```{r predict_h2, exercise = TRUE}
161+
set.seed(960412)
162+
# Machine à vecteurs supports
163+
cvpredict(___, ___ = ___) |> confusion(___$___) |> summary()
164+
# Machine à vecteurs supports avec un noyau linéaire
165+
cvpredict(___, ___ = ___) |> confusion(___$___) |> summary()
166+
# Réseaux de neurones artificiels
167+
cvpredict(___, __ = ___) |> confusion(___$___) |> summary()
168+
```
169+
170+
```{r predict_h2-hint-1}
171+
set.seed(960412)
172+
# Machine à vecteurs supports
173+
cvpredict(derma_svmr, cv.k = 5) |> confusion(___$___) |> summary()
174+
# Machine à vecteurs supports avec un noyau linéaire
175+
cvpredict(___, ___) |> confusion(___$___) |> summary()
176+
# Réseaux de neurones artificiels
177+
cvpredict(___, ___) |> confusion(___$___) |> summary()
178+
```
179+
180+
```{r predict_h2-solution}
181+
set.seed(960412)
182+
# Machine à vecteurs supports
183+
cvpredict(derma_svmr, cv.k = 5) |> confusion(derma$class) |> summary()
184+
# Machine à vecteurs supports avec un noyau linéaire
185+
cvpredict(derma_svml, cv.k = 5) |> confusion(derma$class) |> summary()
186+
# Réseaux de neurones artificiels
187+
cvpredict(derma_nnet, cv.k = 5) |> confusion(derma$class) |> summary()
188+
```
189+
190+
```{r predict_h2-check}
191+
grade_code("Bien joué ! Il ne vous reste plus qu'à répondre aux questions ci-dessous")
192+
```
193+
194+
```{r qu_pred}
195+
#nnet_tab
196+
#svml_tab
197+
#svmr_tab
198+
199+
question("Quel classifieur permet d'avoir la meilleure précision pour la classe des `seboreic dermatitis`?",
200+
answer("Machine à vecteurs supports avec un noyau linéaire", correct = TRUE),
201+
answer("Machine à vecteurs supports à noyau radial"),
202+
answer("Réseaux de neurones artificiels"),
203+
allow_retry = TRUE,
204+
submit_button = "Soumettre une réponse",
205+
try_again_button = "Resoumettre une réponse",
206+
incorrect = "Mauvaise réponse. Recommencez et analysez les métriques des trois classifieurs.",
207+
correct = "Bravo, c'est correct !")
208+
209+
```
210+
211+
## Conclusion
212+
213+
Bien joué ! Vous venez de découvrir 2 nouveaux algorithmes de classifications supervisées. Votre boite à outils s'étoffe encore.
214+
215+
```{r comm_noscore, echo=FALSE}
216+
question_text(
217+
"Laissez-nous vos impressions sur cet outil pédagogique",
218+
answer("", TRUE, message = "Pas de commentaires... C'est bien aussi."),
219+
incorrect = "Vos commentaires sont enregistrés.",
220+
placeholder = "Entrez vos commentaires ici...",
221+
allow_retry = TRUE
222+
)
223+
```

0 commit comments

Comments
 (0)