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
Copy file name to clipboardExpand all lines: content/NLP/02_exoclean.qmd
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -219,7 +219,7 @@ tf_idf_term("renard")
219
219
L'exemple précédent ne passait pas très bien à l'échelle. Heureusement, `Scikit` propose une implémentation de la recherche par vecteur TF-IDF que nous pouvons explorer avec un nouvel exercice.
220
220
221
221
::: {.exercise}
222
-
## Exercice 6 : TF-IDF : calcul de fréquence
222
+
## Exercice 1 : TF-IDF : calcul de fréquence
223
223
224
224
1. Utiliser le vectoriseur TF-IdF de `scikit-learn` pour transformer notre corpus en une matrice `document x terms`. Au passage, utiliser l'option `stop_words` pour ne pas provoquer une inflation de la taille de la matrice. Nommer le modèle `tfidf` et le jeu entraîné `tfs`.
225
225
2. Après avoir construit la matrice de documents x terms avec le code suivant, rechercher les lignes où les termes ayant la structure `abandon` sont non-nuls.
@@ -367,7 +367,7 @@ from nltk.metrics import BigramAssocMeasures
367
367
```
368
368
369
369
::: {.exercise}
370
-
## Exercice 7 : n-grams et contexte du mot fear
370
+
## Exercice 2 : n-grams et contexte du mot fear
371
371
372
372
1. Utiliser la méthode `concordance` pour afficher le contexte dans lequel apparaît le terme `fear`.
373
373
2. Sélectionner et afficher les meilleures collocations, par exemple selon le critère du ratio de vraisemblance.
Copy file name to clipboardExpand all lines: content/modelisation/5_clustering.qmd
+123Lines changed: 123 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -541,5 +541,128 @@ Pour mettre en pratique les méthodes de création de clusters, de la base brute
541
541
L'ACP est également très utile dans le champ de la réduction du nombre de variables pour de nombreux types de modélisations, comme par exemple les régressions linéaires.
542
542
Il est ainsi possible de projeter l'espace des variables explicatives dans un espace de dimension donnée plus faible, pour notamment limiter les risques d'_overfitting_.
543
543
544
+
L'inconvénient de cette approche est quelle rend les données utilisées en entrée du modèle moins interprétables qu'avec un LASSO puisque cette dernière technique sélectionne des variables là où la PCA sélectionne des combinaisons linéaires de nos variables.
545
+
546
+
## Exemple
547
+
548
+
Reprenons nos données précédentes. Avant de faire une analyse en composante principale, dont l'objectif est de synthétiser des sources de variabilité dans nos données, il est conseillé de standardiser les variables lorsque celles-ci ont des échelles différentes (ce qui est le cas dans notre cas).
549
+
550
+
```{python}
551
+
from sklearn.preprocessing import StandardScaler
552
+
553
+
X = df2.drop(['per_gop'], axis=1)
554
+
y = votes['winner']
555
+
556
+
print('Dimensions des données avant PCA : {}'.format(X.shape))
557
+
```
558
+
559
+
Faisons déjà un premier test en réduisant nos données à deux composantes, c'est-à-dire à deux combinaisons linéaires de celles-ci. Il s'agit d'une méthode implémentée en `Scikit`, très pratique. Le faire à la main serait pénible
560
+
561
+
562
+
```{python}
563
+
#| echo: true
564
+
from sklearn.decomposition import PCA
565
+
566
+
scaler = StandardScaler()
567
+
X_standardized = scaler.fit_transform(X)
568
+
569
+
n_components = 2
570
+
pca = PCA(n_components=n_components)
571
+
```
572
+
573
+
<details>
574
+
575
+
<summary>
576
+
Faire une PCA à la main (exercice éducatif mais peu utile dans la vraie vie)
On peut utiliser notre méthode `fit_transform` pour calculer les paramètres utiles de notre PCA, à savoir les poids à utiliser pour reprojeter nos variables dans l'espace des composantes:
600
+
601
+
```{python}
602
+
#| echo: true
603
+
604
+
x_2d = pca.fit_transform(X_standardized)
605
+
columns=[f'component_{i}' for i in range(1, n_components + 1)]
606
+
df_pca = pd.DataFrame(x_2d, columns=columns)
607
+
df_pca['classe'] = y
608
+
print('Dimensions des données après PCA : {}'.format(x_2d.shape))
609
+
df_pca
610
+
```
611
+
612
+
Ces composantes ne sont plus interprétables directement. Il s'agit d'une combinaison linéaire de nos variables. Prenons le premier axe pour s'en assurer:
613
+
614
+
```{python}
615
+
#| echo: true
616
+
np.dot(X_standardized, pca.components_[0])
617
+
```
618
+
619
+
Pourquoi rendre nos données moins interprétables? Parce qu'avec seulement deux colonnes, on va synthétiser beaucoup plus d'information, c'est-à-dire capturer beaucoup plus de variance de nos données, qu'avec nos données brutes.
620
+
621
+
La variance expliquée par chaque composante est la suivante:
Avec deux axes, on capture donc une bonne partie de notre variance:
633
+
634
+
```{python}
635
+
#| echo: true
636
+
tableau_variance["Variance expliquée (%)"].sum()
637
+
```
638
+
639
+
Le premier axe capture une part importante de la variance, le deuxième axe étant déjà beaucoup moins explicatif. Ceci est attendu puisque les axes des PCA capturent une part décroissante de la variance.
640
+
641
+
Ici nous avions fixé le nombre d'axes principaux à 2. Comment choisir ce nombre en pratique ? Comme précédemment pour les _k means_, le critère du coude est fréquemment utilisé. Représentons la part de variance expliquée en fonction du nombre d'axes:
Les coudes sont peu francs, on peut donc choisir deux ou trois axes. Si on préfère utiliser un seuil de variance expliquée dans notre analyse, on utilisera plutôt l'option `n_components` de `Scikit`. Par exemple, si on désire conserver les axes permettant d'expliquer 90% de la variabilité de nos données:
0 commit comments