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
Lors de la création d'un classifieur, on va définir un set d'apprentissage et un set de test. Il est évident qu'il ne faut jamais employer les mêmes individus en apprentissage et en test. Cela aurait pour conséquence de surévaluer la capacité d'un classifieur à reconnaître les niveaux de la variable facteur d'intérêt.
48
+
Lors de la création d'un classifieur, nous allons définir un set d'apprentissage et un set de test. Il ne faut jamais employer les mêmes individus en apprentissage et en test. Cela aurait pour conséquence de surévaluer la capacité d'un classifieur à reconnaître les niveaux de la variable facteur d'intérêt.
50
49
51
-
La validation croisée est une méthode particulière qui permet d'employer tous les objets, à la fois dans le set d'apprentissage et dans le set de test, mais jamais simultanément.
50
+
La validation croisée est une méthode particulière qui permet d'utiliser tous les items, à la fois dans le set d'apprentissage et dans le set de test, mais jamais simultanément. Elle permet donc d'évaluer les performances d'un classifieur de manière non biaisée, tout en utilisant un maximum d'items à la fois en apprentissage et en test.
52
51
53
52
L'objectif de ce tutoriel est de comprendre la validation croisée et de l'appliquer en pratique dans le cas d'une analyse discriminante linéaire.
54
53
55
54
## Exploration des données
56
55
57
-
Les données employées dans cette séance d'exercice proviennent de l'article : ["Classification of Rice Varieties Using Artificial Intelligence Methods"](https://doi.org/10.18201/ijisae.2019355381). N'hésitez pas à consulter cet article pour en apprendre davantage sur ces données.
56
+
Les données employées dans cette séance d'exercices proviennent de l'article ["Classification of Rice Varieties Using Artificial Intelligence Methods"](https://doi.org/10.18201/ijisae.2019355381). N'hésitez pas à consulter cet article pour en apprendre davantage sur les données.
58
57
59
58
```{r, echo=TRUE}
60
59
rice <- read("rice", package = "BioDataScience3")
61
60
```
62
61
63
-
Le tableau `rice` a `r nrow(rice)` observations. Deux variétés de riz sont étudiées: `Cammeo` et `Osmancik`. Sur base d'analyse d'image, sept variables morphologiques sont extraites comme le périmètre, l'aire ou encore la longueur de l'axe majeur de l'ellipsoïde qui entoure la silhouette du grain de riz sur une image numérique.
62
+
Le tableau `rice` a `r nrow(rice)`items. Deux variétés de riz sont étudiées: `Cammeo` et `Osmancik`. Sur base d'analyse d'image, sept variables morphométriques sont calculées sur base d'images numériques des grains de riz comme le périmètre, l'aire ou encore la longueur de l'axe majeur de l'ellipsoïde qui entoure la silhouette du grain de riz sur l'image.
64
63
65
-
Les résultats ci-dessous vous renseignent sur les variables.
64
+
Les tableaux ci-dessous résument les variables de notre jeu de données.
66
65
67
66
```{r, echo = TRUE}
68
67
skimr::skim(rice)
69
68
```
70
69
71
-
Vous allez employer l'analyse discriminante linéaire afin d'entraîner vos classifieurs. Vous pouvez décrire vos données à l'aide de tableaux ou de graphiques. Vous pouvez aussi réaliser une ACP pour avoir une vue d'ensemble sur les données avant de vous lancer dans la classification. Voici ce que cela donne :
70
+
Nous avons une variable qualitative `class` à deux niveaux avec des effectifs relativement bien balancés entre les deux classes. Nous avons aussi sept variables numériques qui peuvent servir d'attributs dans une classification supervisée. Il n'y a aucune donnée manquante.
71
+
72
+
Vous utiliserez l'analyse discriminante linéaire pour entraîner vos classifieurs. Vous pouvez décrire vos données à l'aide de tableaux ou de graphiques supplémentaires. Vous pouvez aussi réaliser une ACP pour avoir une vue d'ensemble sur les données avant de vous lancer dans la classification ADL. Voici ce que cela donne :
@@ -81,23 +82,23 @@ Le graphique des éboulis est présenté ci-dessous.
81
82
chart$scree(rice_pca)
82
83
```
83
84
84
-
Voici la représentation dans l'espace des variables pour le premier plan de l'ACP :
85
+
Voici la représentation dans l'espace des variables dans le premier plan de l'ACP :
85
86
86
87
```{r, echo=TRUE}
87
88
chart$loadings(rice_pca)
88
89
```
89
90
90
-
... et la représentation dans l'espace des individuspour le premier plan de l'ACP :
91
+
... et la représentation dans l'espace des individus, toujours dans le premier plan de l'ACP :
91
92
92
93
```{r, echo=TRUE}
93
94
chart$scores(rice_pca, labels = rice$class)
94
95
```
95
96
96
-
Analysez par vous-même les résultats de l'ACP et estimez si vous penser que l'ADL fonctionnera sur cette base. Ensuite, passez à la section suivante.
97
+
Notez bien qu'au niveau de l'ACP, la séparation entre les deux variétés de riz n'apparaît que très partielle.
97
98
98
-
## Préparation du set d'apprentissage et de test
99
+
## Préparation des sets d'apprentissage et de test
99
100
100
-
Utilisez les fonctions `initial_split()`, `training()` et `testing()` afin de définir votre set d'apprentissage et votre set de test. Votre set d'apprentissage se nommera `rice_train` et votre set de test se nommera `rice_test`. Il vous est demandé de réaliser un set d'entraînement contenant 80% des observations. Cet échantillonnage doit être stratifié pour la variable `class`.
101
+
Utilisez les fonctions `initial_split()`, `training()` et `testing()`pour définir votre set d'apprentissage et votre set de test. Votre set d'apprentissage se nommera `rice_train` et votre set de test se nommera `rice_test`. Il vous est demandé de réaliser un set d'apprentissage contenant 80% des observations. Cet échantillonnage doit être stratifié pour la variable `class`.
101
102
102
103
```{r rice_split_h2, exercise=TRUE}
103
104
set.seed(8888) # Fixer le début du générateur de nombres pseudo-aléatoires
grade_code("Vous avez réalisé votre set d'apprentissage et votre set de test avec les proportions demandées.", "Avez-vous bien respectée les consignes ? Il ne faut compléter que les champs signalés par ___.")
133
+
grade_code("Vous avez réalisé votre set d'apprentissage et votre set de test avec les proportions demandées.", "Avez-vous bien respectée les consignes ? Il ne faut compléter que les champs ___.")
133
134
```
134
135
135
-
## Création des classifieurs
136
-
137
-
### Analyse discriminante linéaire
138
-
139
-
Il vous est demandé de réaliser un classifieur utilisant l'analyse discriminante linéaire. C'est à vous de définir le tableau de données à employer entre `rice`, `rice_train` et `rice_test`.
136
+
## Analyse discriminante linéaire
140
137
141
-
Entraînez un modèle de type analyse discriminant linéaire avec le set d'apprentissage (utilisez la formule condensée). Votre objectif est de prédire la variable `class` à l'aide des sept autres variables. Assignez le classifieur n'utilisant pas la validation croisée à `rice_lda` et assignez le classifieur utilisant la validation croisée à `rice_lda_cv`.
138
+
Entraînez un premier classifieur `rice_lda`avec l'analyse discriminante linéaire (formule condensée) pour prédire `class` à l'aide des sept autres variables**sans utiliser la validation croisée** ensuite. Quel jeu de données devez-vous utiliser ? `rice`, `rice_train` ou `rice_test` ?
142
139
143
-
```{r lda_h2, exercise = TRUE}
140
+
```{r lda_h2, exercise=TRUE}
144
141
rice_lda <- mlLda(data = ___, ___ ~ ___)
145
142
summary(rice_lda)
146
143
```
@@ -159,10 +156,10 @@ summary(rice_lda)
159
156
```
160
157
161
158
```{r lda_h2-check}
162
-
grade_code("Votre classifieur LDA est entrainé. Il faut encore en mesurer les performances.", "Avez-vous bien proposé la formule écrite sous sa forme condensée ? ")
159
+
grade_code("Votre classifieur LDA est entrainé. Il faut encore en mesurer les performances.", "Avez-vous bien écrit la formule sous sa forme condensée ? Avez-vous choisi le bon jeu de données ?")
163
160
```
164
161
165
-
Calculez maintenant votre classifieur afin d'en étudier les performances à l'aide de la validation croisée (toujours en utilisant la formule condensée).
162
+
Entraînez maintenant un second classifieur `rice_lda_cv`, mais cette fois dans le but d'en étudier les performances par validation croisée (toujours en utilisant la formule condensée).
166
163
167
164
```{r lda_cv_h2, exercise=TRUE}
168
165
rice_lda_cv <- mlLda(data = ___, ___ ~ ___)
@@ -183,14 +180,14 @@ summary(rice_lda_cv)
183
180
```
184
181
185
182
```{r lda_cv_h2-check}
186
-
grade_code("Si vous souhaitez utiliser la validation croisée pour le test, vous pouvez entraîner votre modèle sur l'ensemble des données dans un premier temps avec {mlearning} que nous utilisons ici. Il faut bien sûr encore mesurer ses performances.", "Avez-vous bien écrit la formule sous sa forme condensée ?")
183
+
grade_code("Si vous souhaitez utiliser la validation croisée pour le test, vous pouvez entraîner votre modèle sur l'ensemble des données dans un premier temps avec {mlearning} que nous utilisons ici. Il faut bien sûr encore étudier ses performances ensuite.", "Avez-vous bien écrit la formule sous sa forme condensée ?")
187
184
```
188
185
189
186
## Évaluation des performances des classifieurs
190
187
191
188
Évaluez les performances du premier classifieur `rice_lda` sans validation croisée. Pour rappel, les jeux de données disponibles sont les suivants : `rice`, `rice_train` et `rice_test`
192
189
193
-
```{r pred_lda_h2, exercise = TRUE}
190
+
```{r pred_lda_h2, exercise=TRUE}
194
191
# prédiction
195
192
rice_pred <- ___(___, ___)
196
193
# matrice de confusion
@@ -222,7 +219,7 @@ grade_code("Vous venez de calculer les métriques de performances du premier cla
222
219
223
220
Évaluez les performances du second classifieur `rice_lda_cv`, cette fois-ci, à l'aide d'une validation croisée dix fois.
224
221
225
-
```{r lda_pred_cv_h2, exercise = TRUE}
222
+
```{r lda_pred_cv_h2, exercise=TRUE}
226
223
set.seed(76456)
227
224
# prédiction
228
225
rice_pred_cv <- ___(___, cv.k = ___)
@@ -252,7 +249,7 @@ summary(rice_conf_cv)
252
249
```
253
250
254
251
```{r lda_pred_cv_h2-check}
255
-
grade_code("Toute la mécanique de la validation croisée est \"déployée\" à l'intérieur de `cvpredict()`. En réalité, les données sont divisées en 10 sous-unités et 10 classifieurs différents sont entraînées et testés successivement. Aucun n'est identique à `rice_lda_cv`, mais ils en sont tous relativement proches. Prenez un peu de temps pour analyser votre matrice de confusion et les métriques qui en découlent. Combien de données sont utilisées ici ?")
252
+
grade_code("Toute la mécanique de la validation croisée est déployée à l'intérieur de `cvpredict()`. En réalité, les données sont divisées en dix sous-tableaux et dix classifieurs différents sont entraînées et testés successivement. Aucun n'est identique à `rice_lda_cv`, mais ils en sont tous relativement proches. Prenez un peu de temps pour analyser votre matrice de confusion et les métriques qui en découlent. Combien de données sont utilisées ici ?")
256
253
```
257
254
258
255
Répondez aux questions ci-dessous relatives aux deux classifieurs `rice_lda` et `rice_lda_cv`.
@@ -267,7 +264,7 @@ quiz(
267
264
try_again_button = "Resoumettre une réponse",
268
265
incorrect = "Mauvaise réponse. Recommencez afin de trouver la bonne réponse",
269
266
correct = "C'est le nombre d'observations utilisées en apprentissage qui sont déterminantes ici (plus d'observations mènent potentiellement à un meilleur classifieur)."),
270
-
question("Combien d'items sont employé afin de déterminer les performances du classifieur avec validation croisée ?",
267
+
question("Combien d'items sont employé pour déterminer les performances du classifieur avec validation croisée ?",
Ce tutoriel vous a permis de découvrir la validation croisée appliquée sur une analyse discriminante linéaire. L'avantage de la validation croisée est de pouvoir employer plus de données pour entraîner votre classifieur. Il n'est pas nécessaire de séparer les groupes à la main et de calculer *n* fois les performances avant de sommer les *n* matrices de confusion en une seule. La fonction `cvpredict()` se charge de faire tout cela pour vous automatiquement.
293
+
Ce tutoriel vous a permis de découvrir la validation croisée appliquée sur une analyse discriminante linéaire. L'avantage de la validation croisée est de pouvoir utiliser plus de données pour entraîner votre classifieur et également pour son test. Il n'est pas nécessaire de séparer les groupes à la main et de calculer *k* fois les performances avant de sommer les *k* matrices de confusion en une seule. La fonction `cvpredict()` se charge de faire tout cela pour vous automatiquement.
0 commit comments