Skip to content

Commit 17abecd

Browse files
committed
2 parents 9b79259 + 9d455f5 commit 17abecd

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

devel/tutorials/B06La_kmeans/B06La_kmeans.Rmd

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: "K-moyenne"
3-
author: "Guyliann Engels & Philippe Grosjean"
2+
title: "K-moyennes"
3+
author: "Guyliann Engels, Raphael Conotte & Philippe Grosjean"
44
description: "**SDD II Module 6** Regroupement par les K-moyennes"
55
tutorial:
66
id: "B06La_kmeans"
@@ -23,8 +23,7 @@ library(ade4)
2323
2424
# Preparation dataset ------
2525
data("doubs", package = "ade4")
26-
enviro <- doubs$env
27-
26+
enviro <- as_tibble(doubs$env)
2827
```
2928

3029
```{r, echo=FALSE}
@@ -39,16 +38,22 @@ BioDataScience2::learnr_server(input, output, session)
3938

4039
## Objectifs
4140

42-
- Vérifier que vous avez bien compris les différentes étapes de la classification par les k-moyennes : choix du nombre de groupes, classification par les k-moyennes, récupération des coordonnées des centres et représentation graphique.
43-
- Vous préparer à analyser et interpréter de manière autonome un jeu de données multivariées à l'aide des k-moyennes
41+
Les k-moyennes sont une méthode qui permet de réaliser des regroupements d'individus en partant d'un tableau multivarié. Cette méthode a le même objectif que la classification hiérarchique ascendante que vous avez découverte dans le module précédent. Cette méthode a l'avantage par rapport à la classification hiérarchique d'être moins gourmande en temps de calcul et en mémoire vive. Elle sera donc à privilégier lorsque vous vous retrouvez confronté à un grand jeu de données.
42+
43+
Dans ce learnr, vous allez pouvoir auto-évaluer votre capacité à\ :
44+
45+
- comprendre les différentes étapes de la classification par les k-moyennes : choix du nombre de groupes, classification par les k-moyennes, récupération des coordonnées des centres et représentation graphique.
46+
- analyser et interpréter de manière autonome un jeu de données multivariées à l'aide des k-moyennes
4447

45-
Vous devez avoir compris le contenu du [module 6](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2020/k-moyenne-mds-som.html) du cours et en particulier la [section 6.1](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2020/k-moyennes.html). Assurez-vous d'avoir réalisé les exercices H5P qui s'y trouvent avant de vous lancer dans ce tutoriel Learnr.
48+
N'entamer ce tutoriel qu'après avoir compris le principe des k-moyennes proposé dans le [module 6](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2020/k-moyenne-mds-som.html) du cours et en particulier la [section 6.1](https://wp.sciviews.org/sdd-umons2/?iframe=wp.sciviews.org/sdd-umons2-2020/k-moyennes.html).
49+
50+
Assurez-vous d'avoir réalisé les exercices H5P qui s'y trouvent avant de vous lancer dans ce tutoriel learnr.
4651

4752
## Données environnementales du Doubs
4853

4954
Lors d'une étude visant à analyser l'abondance de 27 espèces de poissons sur 30 stations le long du Doubs, une rivière qui serpente entre la France et la Suisse pour se jeter finalement dans la Saône, les chercheurs y ont également mesuré des variables environnementales.
5055

51-
![Carte du Doubs, d'après OpenStreetMap.](images/doubs.jpg)
56+
![Carte du Doubs, d'après OpenStreetMap.](images/doubs.jpg){width='60%'}
5257

5358
Ces données environnementales peuvent notamment servir à classer les micro-habitats selon des critères différents. C'est ce que nous allons essayer de faire avec l'aide de la classification par les k-moyennes. Voici le détail des onze variables mesurées. Notez que les auteurs ont décidé d'appliquer des coefficients multiplicateurs ici pour homogénéiser les données :
5459

@@ -76,26 +81,27 @@ head(enviro)
7681

7782
Le regroupement par les K-moyennes est une méthode simple d'analyse multivariée considérée comme moins efficace que le CAH. Néanmoins, cette méthode permet de réaliser des regroupements plus rapidement sur des gros jeu de données, là où la CAH nécessiterait trop de temps de calcul et de mémoire vive.
7883

79-
L'un des inconvénients de cette méthode est que vous devez proposer le nombre de groupes *k* que vous souhaitez réaliser. Il vous faut donc le fixer par vous même.
84+
L'un des inconvénients de cette méthode est que vous devez proposer le nombre de groupes *k* que vous souhaitez utiliser avant de pouvoir calculer vos regroupements grâce aux k-moyennes. Pour vous aider dans ce choix, le package `factoextra` propose avec la fonction `fviz_nbclust()`, un outil graphique permettant de donner une indication sur le nombre de groupes *k* optimal.
85+
86+
Il existe plusieurs méthodes pour déterminer le nombre de groupes optimal. Nous vous proposons d'utiliser la méthode `wss` (total within sum of square). Cette méthode va de calculer la somme des carrés des distances intra-groupes en fonction du nombre de centres *k*. Plus le nombre de *k* va augmenter, plus la somme des carrés des distances intra-groupes va tendre à diminuer. On va devoir déterminer le nombre de groupes le plus approprié. L'objectif est de choisir le *k* le plus élevé qui permet d'avoir une forte diminution de la somme des carrés distances intra-groupes par rapport au *k* inférieur. Par contre lorsque l'ajout d'un groupe ne permet plus de diminuer fortement la valeur de *k*, c'est que nous avons trouvé la valeur de *k* optimal.
8087

81-
Pour vous aidez dans ce choix, le package `factoextra` propose avec la fonction `fviz_nbclust()`, un outil graphique permettant de donner une indication sur le nombre de groupes *k* optimal.
88+
**Soyez toujours vigilant ! Le nombre de groupes proposé par factoextra::fviz_nbclust() n’est qu’indicatif !**
8289

8390
Sur base du jeu de données `enviro`, réalisez un graphique permettant d'estimer le nombre de groupes à employer dans la méthode des k-moyennes. Les variables mesurées ayant des unités différentes, n'oubliez pas de **standardiser** vos données en utilisant la fonction `scale()` et assigné les ensuite à `enviro_scale`. Ce n'est pas le cas pour ce jeu de données, mais pensez à éliminer les colonnes non numériques à l’aide de `select()` si vous en avez dans votre tableau de départ.
8491

8592
```{r nbclust_h2, exercise=TRUE}
86-
enviro_scale <- as_tibble(___(___))
87-
___(___, kmeans, method = "wss")
93+
enviro_scale <- ___(___)
94+
___::___(___, kmeans, method = "wss")
8895
```
8996

9097
```{r nbclust_h2-hint-1}
91-
enviro_scale <- as_tibble(___(enviro))
98+
enviro_scale <- ___(enviro)
9299
factoextra::___(enviro_scale, kmeans, method = "wss")
93-
94100
#### ATTENTION: Hint suivant = solution !####
95101
```
96102

97103
```{r nbclust_h2-solution}
98-
enviro_scale <- as_tibble(scale(enviro))
104+
enviro_scale <- scale(enviro)
99105
factoextra::fviz_nbclust(enviro_scale, kmeans, method = "wss")
100106
```
101107

@@ -162,7 +168,6 @@ Réaliser un graphique des nitrates en fonction de l'oxygène dissout. Regrouper
162168

163169
```{r graphe_prep}
164170
enviro_scale <- as_tibble(scale(enviro))
165-
166171
set.seed(210219)
167172
enviro_kmeans <- kmeans(enviro_scale, centers = 4, nstart = 25)
168173
```
@@ -173,11 +178,11 @@ broom::___(___, ___) %>.%
173178
rename(., cluster = ___) -> enviro2
174179
175180
# Créer le tableau des centres
176-
(enviro_centers <- broom::(___, col.names = names(___)))
181+
(enviro_centers <- broom::___(___, col.names = names(___)))
177182
178183
# Graphique
179-
chart(data = , ~___) +
180-
___()+
184+
chart(data = ___ , ___ ~___) +
185+
___() +
181186
# Représentation des centres
182187
___(data = ___, size = 5, shape = 17)
183188
```
@@ -192,7 +197,7 @@ broom::___(OBJ_KMEANS, ___) %>.%
192197
193198
# Graphique
194199
chart(data = enviro2, ___ ~ ___ %col=% ___) +
195-
geom_point()+
200+
geom_point() +
196201
# Représentation des centres
197202
geom_point(data = ___, size = 5, shape = 17)
198203
```
@@ -224,7 +229,7 @@ broom::augment(enviro_kmeans, enviro_scale) %>.%
224229
225230
# Graphique
226231
chart(data = enviro2, nit ~ oxy %col=% cluster) +
227-
geom_point()+
232+
geom_point() +
228233
# Représentation des centres
229234
geom_point(data = enviro_centers, size = 5, shape = 17)
230235
```

0 commit comments

Comments
 (0)