Vous êtes sur la page 1sur 16

Module97

Machine Learning 2

Module97
Machine Learning 2
Réduction de dimensionnalité
Motivations
Motivation I: Compression de données
Motivation II: Visualisation
Principal Component Analysis - Formulation (PCA - Formulation)
PCA vs Régression linéaire
Algorithme d'analyse en composantes principales
Applications de PCA
Clustering
Apprentissage non supervisé: introduction
Différentes applications possibles d'algorithme de clustering:
Algorithme K-Means
Affectation de cluster (Cluster assignment)
Déplacement du centre de gravité (Move centroids)
Formulation
Problèmes avec des clusters non bien séparées.
Objectif d'optimisation
Initialisation aléatoire
Optima Local
Multi Initialisations Aléatoires
Choix du nombre de clusters
Elbow Method
Motivé par un but
Applications de Clustering
Introduction de sklearn.cluster.KMeans
Elbow Method
Motivé par un but
Text - Vectorisation
Sac de mots (Bag of words)
Implémentation de l'algorithme Bag of Words avec Python
Créer un modèle de sac de mots avec Sklearn
TF-IDF
TF
IDF
Term frequency–Inverse document frequency: TF-IDF
Exemple de tf – idf
Extraction de caractéristiques avec le vectoriseur Tf-Idf (Sklearn)
Google Word2Vec - Un vecteur par mot
Similitude cosinus
Google Word2Vec
Télécharger la librairie Gensim via Anaconda3
Implémentation du modèle
Conclusion
Traitement du langage naturel - Nature Language Processing
Tâches NLP de base avec NLTK
Compter le vocabulaire du texte
Fréquence des mots
Normalisation, racinement et lemmatisation des mots(Normalization, Stemming and Lemmatisation)
Normalisation
Stemming
Lemmatisation
Jetons (Tokenizing)
Fractionnement de phrase
Tâches NLP avancées avec NLTK
Étiquetage/Marquage POS (Part-of-speech tagging)
Analyse de la structure de la phrase (Parsing of the sentence structure)
Classification du texte
Introduction
Classification supervisé - Processus général
Identification des caractéristiques à partir du texte
Normalisation du texte
Classificateurs Naive Bayes
Modèle probabiliste
Les paramètres
Apprenez les paramètres
Probabilités antérieures
Probabilités dépendantes
Lisser les paramètres
Support Vector Machines
Frontière de décision
Frontière linéaire(Linear boundary)
Support vector machines
One versus Rest
One versus One
Régularisation et Paramètres de SVM
Conclusion
Classificateurs de texte en Python
scikit-learn
Naive Bayes
SVM
NLTK
Étude de cas - Analyse des sentiments
Collecte de données parfaites pour la formation et les tests
Vectorisation des textes
Création d'un modèle SVM linéaire
Tester le classificateur SVM sur les commentaires Amazon
Conclusion
1 Réduction de dimensionnalité

1.1 Motivations

1.1.1 Motivation I: Compression de données

Nous pouvons vouloir réduire la dimension de nos caractéristiques si nous avons beaucoup de données
redondantes. Pour ce faire, nous trouvons deux entités hautement corrélées, les traçons et créons une
nouvelle ligne qui semble décrire les deux caractéristiques avec précision. Nous plaçons toutes les
nouvelles caractéristiques sur cette seule ligne. La réduction de la dimensionnalité réduira le nombre total
de données que nous devons stocker dans la mémoire de l'ordinateur et accélérera notre algorithme
d'apprentissage.

Remarque: dans la réduction de dimensionnalité, nous réduisons nos caractéristiques plutôt que notre
nombre d'exemples. Notre variable m restera de la même taille. n, le nombre de caractéristiques de
chaque exemple de porte, sera réduit.

1.1.2 Motivation II: Visualisation

Il n'est pas facile de visualiser des données de plus de trois dimensions. Nous pouvons réduire les
dimensions de nos données à 3 ou moins afin de les tracer. Nous devons trouver de nouvelles
caractéristiques, ou plus qui peut résumer efficacement toutes les autres caractéristiques.

Exemple: des centaines de caractéristiques liées au système économique d'un pays peuvent toutes être
combinées en une seule caractéristique que vous appelez «activité économique».

Dans ce chapitre, nous présentons l'analyse des composants principaux et montrons comment elle peut
être utilisée pour la compression de données afin d'accélérer l'apprentissage des algorithmes ainsi que
pour la visualisation d'ensembles de données complexes.

1.2 Principal Component Analysis - Formulation (PCA - Formulation)

Pour le problème de la réduction de dimensionnalité, de loin le plus populaire, l'algorithme de loin le plus
couramment utilisé est ce qu'on appelle l'analyse des composantes principales, ou ACP(PCA).

Disons que nous avons un ensemble de données comme celui-ci. Donc, ceci est un ensemble de données
d'exemples et disons que je veux réduire la dimension des données de bidimensionnelle à
unidimensionnelle. En d'autres termes, je voudrais trouver une ligne sur laquelle projeter les données.
Donc, ce qui semble être une bonne ligne sur laquelle projeter les données, c'est une ligne comme celle-ci,
pourrait être un très bon choix. Et la raison pour laquelle nous pensons que cela pourrait être un bon choix
est que si vous regardez où les versions projetées des échelles de points. Ce que nous constatons, c'est que
la distance entre chaque point et la version projetée est assez petite.

C'est-à-dire que ces segments de ligne bleue sont assez courts. Donc, ce que PCA fait formellement, c'est
qu'il essaie de trouver une surface de dimension inférieure, en fait une ligne dans ce cas, sur laquelle
projeter les données afin que la somme des carrés de ces petits segments de ligne bleue soit minimisée. La
longueur de ces segments de ligne bleue, parfois également appelée erreur de projection.

Écrivons un peu plus formellement le problème de l'PCA.

Le but de l'PCA, si nous voulons réduire les données bidimensionnelles à unidimensionnelles, est:


Trouver la direction(Un vecteur ) dans laquelle projeter les données, donc c'est pour
minimiser l'erreur de projection.
Et en passant, je devrais mentionner que là où le PCA me donne ou n'a pas d'importance.

Il s'agit donc de réduire les données de deux dimensions à une dimension. Dans le cas plus général, nous
avons des données à dimensions et nous voudrons les réduire à dimensions.


Trouver le hyperplan(Un hyperplan ) dans lequel projeter les données,
donc c'est pour minimiser l'erreur de projection.

Dans ce cas, nous voulons trouver non seulement un vecteur unique sur lequel projeter les données, mais
nous voulons trouver des dimensions sur lesquelles projeter les données. Afin de minimiser cette erreur
de projection.

Voici donc l'exemple. Si nous avons un nuage de points 3D comme celui-ci. Alors trouvez une paire de
vecteurs. et . Et ensemble, ces deux vecteurs définissent un plan, ou ils définissent une surface 2D
sur lequel nous allons projeter nos données. Et ce que nous allons faire, c'est projeter les données sur le
sous-espace vectoriel couvert par cet ensemble de vecteurs.

Et donc plus formellement en PCA, ce que nous voulons faire est de trouver cette façon de projeter les
données afin de minimiser le type de distance de projection, qui est la distance entre les points et les
projections. Et donc dans cet exemple 3D aussi. Étant donné un point, nous prendrions le point et le
projeterions sur cette surface 2D.

Nous en avons fini avec cela. Et donc l'erreur de projection serait la distance entre le point et l'endroit où il
est projeté sur ma surface 2D. Et donc ce que fait l'ACP, c'est que j'essaie de trouver la ligne, ou un plan, ou
autre, sur lequel projeter les données, pour essayer de minimiser cette projection carrée, ce 90 degrés ou
cette erreur de projection orthogonale.

1.3 PCA vs Régression linéaire


Enfin, une question que l'on me pose parfois est de savoir comment l'ACP est-elle liée à la régression
linéaire? Parce qu'en expliquant l'ACP, on finit parfois par dessiner des diagrammes comme ceux-ci et cela
ressemble un peu à une régression linéaire.

Il s'avère que l'ACP n'est pas une régression linéaire et, malgré une certaine similitude esthétique, ce sont
en fait des algorithmes totalement différents.

Si nous faisions une régression linéaire, ce que nous ferions serait, à gauche, nous essayerions de prédire la
valeur d'une variable y étant donné certaines caractéristiques d'information x. Et donc la régression
linéaire, ce que nous faisons est d'ajuster une ligne droite afin de minimiser l'erreur carrée entre le point et
cette ligne droite. Et donc ce que nous minimisons serait la grandeur au carré de ces lignes bleues. Et
remarquez que je dessine ces lignes bleues verticalement. Que ces lignes bleues sont la distance verticale
entre le point et la valeur prédite par l'hypothèse.

Alors qu'en revanche, en PCA, il essaie de minimiser la magnitude de ces lignes bleues, qui sont dessinées
sous un angle. Ce sont vraiment les distances orthogonales les plus courtes. La distance la plus courte
entre le point x et cette ligne rouge.
Et cela donne des effets très différents selon le jeu de données. Et plus généralement, lorsque vous
effectuez une régression linéaire, il y a cette variable distinctive y que nous essayons de prédire. Toute cette
régression linéaire ainsi que prendre toutes les valeurs de x et essayer de l'utiliser pour prédire y. Alors
qu'en PCA, il n'y a pas de distinction, ou il n'y a pas de variable spéciale y que nous essayons de prédire. Et
à la place, nous avons une liste de caractéristiques, , etc., jusqu'à , et toutes ces caractéristiques
sont traitées de la même manière, donc aucune d'elles n'est spéciale.

Comme dernier exemple, si j'ai des données tridimensionnelles et que je veux réduire les données de la 3D
à la 2D, alors peut-être que je veux trouver deux directions, et , sur lesquelles projeter mes
données. Ensuite, ce que j'ai, c'est que j'ai trois caractéristiques, x1, x2, x3, et toutes sont traitées de la
même manière. Tous ces éléments sont traités symétriquement et il n'y a pas de variable spéciale y que
j'essaie de prédire.

Et donc l'ACP n'est pas une régression linéaire, et même si à un certain niveau cosmétique ils peuvent
sembler liés, ce sont en fait des algorithmes très différents.

Exercice:

Supposons que vous exécutiez PCA sur l'ensemble de données ci-dessous. Lequel des éléments suivants
serait un vecteur raisonnable sur lequel projeter les données? Par convention, on choisit avec

pour que la longueur du vecteur soit égale à 1.


=


=

Vous comprenez maintenant ce que fait l'PCA. Il essaie de trouver une surface de dimension inférieure sur
laquelle projeter les données, afin de minimiser cette erreur de projection au carré. Pour minimiser la
distance carrée entre chaque point et l'emplacement où il est projeté.

1.4 Algorithme d'analyse en composantes principales

Dans cette section, j'aimerais vous parler de l'algorithme d'analyse des composants principaux.

Avant d'appliquer PCA, il y a une étape de prétraitement des données que vous devez toujours faire.
Compte tenu des ensembles de négociation des exemples, il est important de toujours effectuer une
normalisation moyenne.(Feature scaling/Mean normalisation) Puis, en fonction de vos données, effectuez
peut-être également une mise à l'échelle des caractéristiques.

Donc, pour la normalisation moyenne, nous calculons d'abord la moyenne de chaque caractéristique, puis
nous remplaçons chaque caractéristique, , par moins sa moyenne, ce qui fait que chaque
caractéristique a maintenant une moyenne exactement nulle.


Training set:

Mean normalisation:

Remplacer chaque par


Les différentes caractéristiques ont des échelles très différentes. Ainsi, par exemple, si est la taille d'une
maison et est le nombre de chambres, pour utiliser notre exemple précédent, nous mettons également
à l'échelle chaque entité pour avoir une plage de valeurs comparable. Et donc nous soustrayions la
moyenne, maintenant c'est ce que nous avons en haut, puis divisons par . Ici, est une mesure des
valeurs bêta de la caractéristique . Ainsi, il peut s'agir de la valeur max moins min, ou plus communément
de l'écart type de la caractéristique . Après avoir effectué ce type de prétraitement des données, voici ce
que fait l'algorithme PCA.

Nous avons vu dans la section précédente que ce que fait l'PCA est, il essaie de trouver un sous-espace de
dimension inférieure sur lequel projeter les données, afin de minimiser les erreurs de projection au carré,
somme des erreurs de projection au carré, comme le carré du longueur de ces lignes bleues et donc ce que
nous voulions faire spécifiquement est de trouver un vecteur, , qui spécifie cette direction ou dans le
cas 2D nous voulons trouver deux vecteurs, et pour définir cette surface sur laquelle projeter les
données.

Donc, juste pour rappeler rapidement ce que signifie réduire la dimension des données, pour cet exemple
de gauche, on nous a donné les exemples , qui sont dans . Et ce que nous aimons faire, c'est trouver
un ensemble de nombres dans pour représenter nos données.

Donc, ce que PCA doit faire, c'est que nous devons trouver un moyen de calculer deux choses. La première
consiste à calculer la direction, (Ou et dans le cas 2D) Et l'autre est de savoir comment
calculer ces nombres, .

Dans l'exemple de 2D, nous réduirions les données de 3 dimensions comme dans ,à , qui est
maintenant bidimensionnelle.
Alors, comment calculez-vous toutes ces quantités? Il s'avère qu'une dérivation mathématique, également
la preuve mathématique, pour quelle est la bonne valeur , etc. Cette preuve mathématique
est très compliquée et dépasse le cadre du cours. Mais il s'avère que la procédure pour trouver réellement
la valeur de que vous voulez n'est pas si difficile, même si la preuve mathématique que cette valeur est
la valeur correcte est quelque chose de plus complexe. Mais laissez-moi juste décrire la procédure
spécifique que vous devez implémenter pour calculer toutes ces choses, les vecteurs,

Voici la procédure:

Disons que nous voulons réduire les données à dimensions à dimension. Il faut d'abord calculer
quelque chose qui s'appelle la matrice de covariance, et la matrice de covariance définie de manière
suivante:

Ensuite ce que nous devons faire est de calculer les vecteurs propres de la matrice de covariance. Où
chaque colonne de la matrice est un vecteur propre de


Théorème: La matrice de covariance étant une matrice semi-définie positive, elle peut être
diagonalisée et l’étude des valeurs propres et vecteurs propres permet de caractériser la distribution
à l’aide d’une base orthogonale
Et si nous voulons réduire les données de dimensions à dimensions, alors ce que nous devons faire est
de prendre les premiers vecteurs propres. cela nous donne jusqu'à ce qui nous donne un plan de
dimension sur lequel nous voulons projeter les données.

Maintenant, l'autre chose dont nous avons besoin est de prendre mon ensemble de données d'origine,
qui est dans et de trouver une représentation dimensionnelle inférieure , qui est un pour ces
données. Donc, la façon dont nous allons le faire est de prendre les k premières colonnes de la matrice .

Et la façon dont je vais calculer Z est égal à ce transposée fois la matrice X.

Et bien sûr, ces sont ici, peuvent être des exemples dans notre ensemble de formation peuvent être
des exemples dans notre ensemble de validation croisée, peuvent être des exemples dans notre ensemble
de test.

1.5 Applications de PCA

Dans cette section, nous explorons ce qui est peut-être l'un des algorithmes non supervisés les plus
largement utilisés, l'analyse en composantes principales (ACP). PCA est fondamentalement un algorithme
de réduction de dimensionnalité, mais il peut également être utile en tant qu'outil de visualisation, de
filtrage du bruit, d'extraction et d'ingénierie de caractéristiques, et bien plus encore. Après une brève
discussion conceptuelle de l'algorithme PCA, nous verrons quelques exemples de ces autres applications.

Nous commençons par les importations standard:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
L'analyse en composantes principales est une méthode rapide et flexible non supervisée pour la réduction
de la dimensionnalité des données. Son comportement est le plus simple à visualiser en examinant un jeu
de données bidimensionnel. Considérez les 200 points suivants:

rng = np.random.RandomState(1)
X = np.dot(rng.rand(2, 2), rng.randn(2, 200)).T
plt.scatter(X[:, 0], X[:, 1])
plt.axis('equal');


Rmq: Attention, lorsqu'on utilise les méthodes de sklearn, les vecteurs sont "horizontaux"
par exemple. Et ici, lorsqu'on construit les points dans l'ensemble X, ils ont plutôt verticaux:

. D'où l'importance de ".T" transposée dans le code. Vous pouvez consulter ses tailles avec

la fonction standard "".shape" Faites attention à ce point là dans le future lors vous traitez les
vecteurs avec le package numpy.

Rappel:

À l'œil nu, il est clair qu'il existe une relation presque linéaire entre les variables x et y. Cela rappelle les
données de régression linéaire que nous avons explorées dans En profondeur: régression linéaire, mais le
problème ici est légèrement différent: plutôt que d'essayer de prédire les valeurs y à partir des valeurs x, le
problème d'apprentissage non supervisé tente d'en apprendre davantage sur la relation entre les valeurs x
et y.

Dans l'analyse en composantes principales, cette relation est quantifiée en trouvant une liste des
axes(directions) principaux dans les données et en utilisant ces axes pour décrire l'ensemble de données.
En utilisant l'estimateur PCA de Scikit-Learn, nous pouvons le calculer comme suit:

from sklearn.decomposition import PCA


pca = PCA(n_components=2)
pca.fit(X)
L'ajustement apprend certaines quantités des données, surtout les «composants» et la «explained
variance»:

print(pca.components_)

print(pca.explained_variance_)

Pour voir ce que signifient ces nombres, visualisons-les sous forme de vecteurs sur les données d'entrée, en
utilisant les "composants" pour définir la direction du vecteur, et la "explained variance" pour définir la
longueur au carré du vecteur:

def draw_vector(v0, v1, ax=None):


ax = ax or plt.gca()
arrowprops=dict(arrowstyle='->',
linewidth=2,
color='black'
shrinkA=0, shrinkB=0)
ax.annotate('', v1, v0, arrowprops=arrowprops)

# plot data
plt.scatter(X[:, 0], X[:, 1], alpha=0.2)
for length, vector in zip(pca.explained_variance_, pca.components_):
v = vector * 3 * np.sqrt(length)
draw_vector(pca.mean_, pca.mean_ + v)
plt.axis('equal');
Ces vecteurs représentent les axes principaux des données, et la longueur du vecteur indique à quel point
cet axe est "important" dans la description de la distribution des données - plus précisément, il s'agit d'une
mesure de la variance des données lorsqu'elles sont projetées. sur cet axe. La projection de chaque point
de données sur les axes principaux sont les «composantes principales» des données.

L'utilisation de l'ACP pour la réduction de la dimensionnalité implique de mettre à zéro une ou plusieurs
des plus petites composantes principales, résultant en une projection de dimension inférieure des données
qui préserve la variance maximale des données(Et une erreur de projection minimale).

Voici un exemple d'utilisation de l'ACP comme transformation de réduction de dimensionnalité:

pca = PCA(n_components=1)
pca.fit(X)
X_pca = pca.transform(X)
print("original shape: ", X.shape)
print("transformed shape:", X_pca.shape)

Les données transformées ont été réduites à une seule dimension. Pour comprendre l'effet de cette
réduction de dimensionnalité, nous pouvons effectuer la transformation inverse de ces données réduites et
la tracer avec les données d'origine:

X_new = pca.inverse_transform(X_pca)
plt.scatter(X[:, 0], X[:, 1], alpha=0.2)
plt.scatter(X_new[:, 0], X_new[:, 1], alpha=0.8)
plt.axis('equal');
Les points en gris sont les données d'origine, tandis que les points organes sont la version projetée. Cela
montre clairement ce que signifie une réduction de dimensionnalité PCA: les informations le long du ou
des axes principaux les moins importants sont supprimées, ne laissant que la ou les composantes des
données avec la variance la plus élevée. La fraction de variance qui est coupée (proportionnelle à la
dispersion des points autour de la ligne formée sur cette figure) est à peu près une mesure de la quantité d
'"information" rejetée dans cette réduction de dimensionnalité.

Cet ensemble de données de dimension réduite est à certains égards «assez bon» pour encoder les
relations les plus importantes entre les points: malgré la réduction de la dimension des données de 50%, la
relation globale entre les points de données est en grande partie préservée.

Vous aimerez peut-être aussi