Skip to content
Snippets Groups Projects
Commit 61a9c3b8 authored by Elise Maigné's avatar Elise Maigné
Browse files

small sample size

parent e7ce2f57
No related branches found
No related tags found
No related merge requests found
...@@ -114,11 +114,16 @@ p3 + p2 + p4 ...@@ -114,11 +114,16 @@ p3 + p2 + p4
::: :::
::: {.column width=50%} ::: {.column width=50%}
**Sous-apprentissage** = plus de biais, moins de variance #### Sous-apprentissage
**Sur-apprentissage** = plus de variance, moins de biais plus de biais, moins de variance
#### Sur-apprentissage
plus de variance, moins de biais
::: :::
:::: ::::
On cherche le modèle **le plus simple** qui donne les meilleurs résultats.
## Le processus du machine learning ## Le processus du machine learning
::: columns ::: columns
...@@ -277,7 +282,8 @@ N'empêche toujours pas le sur-apprentissage ! ...@@ -277,7 +282,8 @@ N'empêche toujours pas le sur-apprentissage !
## Validation croisée ## Validation croisée
- **Holdout** (Train/Test/Validation seulement pour grands jeux de données, et sous certaines conditions) - **Holdout** (Train/Test/Validation seulement pour grands jeux de données, et sous certaines conditions) [voir @Molinaro2005; @hawkins2003]
. . . . . .
Exemples de techniques de validation croisée : Exemples de techniques de validation croisée :
...@@ -305,9 +311,7 @@ Voir par exemple : ...@@ -305,9 +311,7 @@ Voir par exemple :
## La théorie VS la vie ## La théorie VS la vie
L'approche Train/Test/Validation (i.e. Holdout) marche uniquement si on a des jeux de données très grands [voir @Molinaro2005; @hawkins2003] et ne permet pas complètement d'enlever le sur-apprentissage. On trouve au choix :
On trouve aussi :
- petits échantillons - petits échantillons
- classes déséquilibrées - classes déséquilibrées
...@@ -319,6 +323,7 @@ On va contrôler : ...@@ -319,6 +323,7 @@ On va contrôler :
- le tirage aléatoire - le tirage aléatoire
- le processus de validation (validation croisée) - le processus de validation (validation croisée)
- le choix des méthodes
# Contrôle du tirage aléatoire {.inverse} # Contrôle du tirage aléatoire {.inverse}
...@@ -442,8 +447,11 @@ Des individus ressemblant à ceux de la classe minoritaire sont générés. 2 pa ...@@ -442,8 +447,11 @@ Des individus ressemblant à ceux de la classe minoritaire sont générés. 2 pa
::: {.fontsize80pct} ::: {.fontsize80pct}
Technique basée sur le bootstrap et des méthodes à noyaux. Génère des individus artificiels autour des individus. 2 paramètres à ajuster. Technique basée sur le bootstrap et des méthodes à noyaux. Génère des individus artificiels autour des individus. 2 paramètres à ajuster.
::: :::
:::
::: {.fragment}
```{r} ```{r}
#| echo: true
?caret::trainControl # Voir argument sampling ?caret::trainControl # Voir argument sampling
``` ```
::: :::
...@@ -452,19 +460,84 @@ Technique basée sur le bootstrap et des méthodes à noyaux. Génère des indiv ...@@ -452,19 +460,84 @@ Technique basée sur le bootstrap et des méthodes à noyaux. Génère des indiv
Peut être pris en compte directement par l'algorithme (à ne pas combiner avec un rééchantillonnage). Peut être pris en compte directement par l'algorithme (à ne pas combiner avec un rééchantillonnage).
- rééchantillonnage interne à la volée (bagging, boosting), sur-pondération de la classe minoritaire (poids), ... - rééchantillonnage interne à la volée (boosting, bagging), sur-pondération de la classe minoritaire (poids), ...
Pris en compte sur l'erreur de classification : Pris en compte sur l'erreur de classification :
- on ajuste le calcul à postériori - on ajuste le calcul à postériori (ex. balanced MSE, ...)
::: fragment ::: fragment
Dans tous les cas, une méthode mal utilisée peut accroître les biais du modèle. Dans tous les cas, une méthode mal utilisée peut accroître les biais du modèle.
::: :::
## Déséquilibre des classes - Mesures d'erreurs # Peu d'observations
## Peu d'observations
- Rechercher des modèles simples : regrouper classes, diminuer le nombre de variables.
- Pour modèles d'arbres : diminuer la profondeur max, ...
- Attention aux aberrants.
- Faire de la sélection de variables.
## Peu d'observations
- Utiliser des approches ensemblistes (combiner plusieurs modèles) pour diminuer la variance.
```{r}
set.seed(12345) # Create example data frame
x <- seq(-10,20, length=60)
y <- rnorm(50, mean=0, sd=500) + 1.1 * x^3
df <- data.frame(x, y)
p1 <- ggplot(df, aes(x=x, y=y)) +
geom_point() +
hrbrthemes::theme_ipsum() +
theme(plot.margin = unit(c(0, 0.5, 0, 0.5), "cm"),
axis.text.x = element_blank(),
axis.text.y = element_blank())
my_mod3 <- lm(y~ x + I(x^2) + I(x^3), data=df)
fitok <- data.frame("x" = sort(df$x),
"ypred" = fitted(my_mod3)[order(df$x)])
set.seed(123)
generate_overfitted <- lapply(1:10, function(sim){
dfsample <- df[sample(1:60, replace = FALSE, size=20),]
tempmod <- lm(y~ x + I(x^2) + I(x^3), data=dfsample)
return(
data.frame("sim" = sim,
"x" = df$x,
"ypred" = predict.lm(tempmod, newdata=df))
)
})
overfit <- do.call("rbind", generate_overfitted)
p1 <- ggplot(overfit, aes(x=x, y=ypred, color=factor(sim), group=sim)) +
geom_line(alpha=0.8) +
hrbrthemes::theme_ipsum() +
theme(legend.position = "none") +
labs(title="10 small models (subsamples)")
meanfit <- data.frame(
"x" = x,
"y" = fitted(my_mod3)[order(df$x)],
"ypredmean" = c(by(overfit$ypred, overfit$x, mean))
)
p2 <- ggplot(meanfit, aes(x=x)) +
geom_line(aes(y=y, col="Real model")) +
geom_line(aes(y=ypredmean, col="Mean of 10\nsmall models")) +
hrbrthemes::theme_ipsum() +
scale_color_manual(name='',
breaks=c('Real model', 'Mean of 10\nsmall models'),
values=c('Real model'='black', 'Mean of 10\nsmall models'='blue')) +
labs(title="Mean") +
theme(legend.position = "top")
p1+p2
```
# Hyperparamètres # Hyperparamètres
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment