Cette fois, j'ai résumé l'algorithme de réduction de dimension ** t-SNE ** (t-Distributed Stochastic Neighbor Embedding). t-SNE est un ** algorithme de réduction de dimension ** pour la conversion et la visualisation de données haute dimension en 2 ou 3 dimensions, et a été développé par le professeur Hinton, également connu comme le père de l'apprentissage profond. (Le professeur Hinton est incroyable) Cette fois, je vais comprendre ce t-SNE et améliorer la puissance de visualisation.
Pour comprendre t-SNE, je me suis référé à ce qui suit.
** t-SNE ** est un algorithme de réduction de dimension permettant de déposer des données de grande dimension en 2 ou 3 dimensions. L'ACP et le MDS sont les classiques de la réduction de dimension, mais il y avait quelques problèmes avec ces réductions de dimension linéaires.
Afin de résoudre ces problèmes, diverses technologies de réduction de dimension non linéaire ** ont été créées pour maintenir la structure locale des données (en gardant des données similaires proches même dans les dimensions inférieures). J'ai fait. t-SNE est un algorithme qui suit cette tendance.
Ci-dessous, une image de données non linéaires.
Les points de t-SNE sont décrits. Je voudrais décrire en détail le contenu spécifique du processus et les raisons des avantages et des inconvénients dans l'explication de l'algorithme ci-dessous.
** Points de traitement **
--Convertir pour que la distribution de distance dans la dimension supérieure corresponde autant que possible à la distribution de distance dans la dimension inférieure.
mérite
Démérite
--Si vous modifiez la Perplexité (paramètre interne), un cluster complètement différent apparaîtra.
Pour comprendre l'algorithme t-SNE, nous commençons par comprendre son prédécesseur, l'algorithme SNE. Après cela, nous allons régler les problèmes de SNE et résumer le t-SNE créé en résolvant les problèmes.
SNE commence par convertir la distance entre les points de données en probabilité conditionnelle. Sélectionnez $ x_ {j} $ comme voisinage pour la similitude entre les points de données $ x_ {i} $ et $ x_ {j} $, étant donné $ x_ {i} $ ** Probabilité conditionnelle $ p_ { Exprimé sous la forme j | i} $. ** De plus ici, on suppose que $ x_j $ est sélectionné de manière probabiliste sur la base d'une ** distribution normale centrée sur $ x_ {i} $ **.
Alors $ p_ {j | i} $ peut être exprimé par la formule suivante.
p_{j|i} = \frac{\exp(-||x_{i} - x_{j}||^2/2\sigma_{i}^2)}{\sum_{k\neq i}\exp(-||x_{i} - x_{k}||^2/2\sigma_{i}^2)}
Ce qui précède est obtenu à partir de la fonction de densité de probabilité de la distribution normale. $ \ Frac {1} {\ sqrt {2πσ ^ 2}} $ est une constante et est annulée par le dénominateur.
\frac{1}{\sqrt{2πσ^2}}\exp{(-(x-μ)^2/2σ^2)}
Nous supposons une distribution normale avec une moyenne $ x_ {i} $ et une variance $ \ sigma_ {i} ^ 2 $, mais la valeur de la variance $ \ sigma_ {i} ^ 2 $ sera ajustée par les paramètres décrits ci-dessous. .. Puisque la distribution $ \ sigma_ {i} ^ 2 $ change le type de distribution supposé, la sortie après la réduction de dimension finale changera également de manière significative.
Aussi, puisque cette fois le but est d'exprimer la distance entre différentes données avec une probabilité conditionnelle, nous la placerons comme suit.
p_{i|i} = 0
La similitude entre les points de données à dimension réduite $ y_ {i} $ et $ y_ {j} $ est également exprimée en ** probabilité conditionnelle $ q_ {j | i} $ comme précédemment. ** Supposons également que $ y_j $ soit sélectionné de manière probabiliste sur la base d'une distribution normale centrée sur $ y_ {i} $, mais contrairement à avant ** la variance est $ \ frac {1} { Corrigé avec \ sqrt {2}} $ **. En le fixant, vous pouvez annuler la dispersion de la formule précédente et la simplifier.
$ q_ {j | i} $ peut être exprimé par la formule suivante.
q_{j|i} = \frac{\exp(-||y_{i} - y_{j}||^2)}{\sum_{k\neq i}\exp(-||y_{i} - y_{k}||^2)}
Placez-le comme suit comme avant.
q_{i|i} = 0
Étant donné que la relation de distance entre les points de données dans la dimension supérieure et la relation de distance dans la dimension inférieure après la réduction de dimension doit correspondre autant que possible,
La fonction de perte $ C $ cette fois est exprimée par la formule suivante.
C = \sum_{i}KL(P_{i}||Q_{i}) = \sum_{i} \sum_{j} p_{j|i}\log\frac{p_{j|i}}{q_{j|i}}
$ P_ {i} $ représente toutes les probabilités conditionnelles données $ x_ {i} $, $ Q_ {i} $ représente toutes les conditions données $ y_ {i} $ Représente une probabilité.
iciLa divergence KL est un indicateur asymétriqueAlors
4.Perplexity Il y avait $ \ sigma_ {i} ^ 2 $ comme paramètre restant. Il s'agit de la distribution d'une distribution normale centrée sur le point de données de grande dimension $ x_ {i} $. C'est un paramètre très important car le type de distribution supposé dépend de la distribution $ \ sigma_ {i} ^ 2 $.
Si les données sont denses, il convient de supposer $ \ sigma_ {i} ^ 2 $ small, et si les données sont rares, il convient de supposer $ \ sigma_ {i} ^ 2 $ large. Un paramètre appelé Perplexité est utilisé pour savoir comment assumer les données.
Le SNE coupe $ \ sigma_ {i} ^ 2 $ qui générera $ P_ {i} $ avec une Perplexité fixe spécifiée par son utilisateur. La perplexité est définie comme suit.
Perp(P_{i}) = 2^{H(P_{i})}
De plus, $ H (P_ {i}) $ est l'entropie de $ P_ {i} $ et est défini comme suit.
H(P_{i}) = -\sum_{j}p_{j|i}\log_{2}p_{j|i}
Par exemple, corrigez Perplexité avec une valeur telle que $ 40 $ et recherchez $ \ sigma_ {i} ^ 2 $ qui correspond à l'équation. Si la Perplexité est grande, $ \ sigma_ {i} ^ 2 $ sera naturellement grande, et on suppose que les données sont clairsemées. De plus, si la Perplexité est petite, $ \ sigma_ {i} ^ 2 $ l'est également, en supposant que les données sont denses.
La perplexité peut également être reformulée comme ** le nombre qui détermine combien de voisins sont considérés à partir du point de données $ x_ {i} $ **.
Minimisez la fonction de perte en utilisant la méthode de descente de gradient probabiliste. Le gradient utilise ce qui suit, qui est la valeur obtenue en différenciant la fonction de perte par $ y_ {i} $.
\frac{\delta C}{\delta y_{i}} = 2\sum_{j}(p_{j|i}-q_{j|i}+p_{i|j}-q_{i|j})(y_{i}-y_{j})
Nous déplacerons progressivement $ y_ {i} $ en utilisant ce dégradé, et la formule de mise à jour est la suivante.
Y^{(t)} = Y^{(t-1)} + \eta \frac{\delta C}{\delta Y} + \alpha(t)(Y^{(t-1)} - Y^{(t-2)})
Est une image de déplacement $ Y ^ {(t-1)} $ du taux d'apprentissage $ \ eta $ uniquement dans le sens du gradient $ \ frac {\ delta C} {\ delta Y}
C'est le flux de SNE.
Ce qui précède est le flux de SNE, mais SNE a les deux problèmes suivants.
Parce que la fonction de perte utilise la divergence KL
Problème d'encombrement Lorsqu'un objet multidimensionnel est déposé dans une dimension inférieure, le nombre de points de données qui peuvent être équidistants les uns des autres diminue, donc ** lorsque la dimension est supprimée, il devient encombré pour tenter de maintenir l'équidistance **. C'est un problème.
Par exemple, dans le cas de 3 dimensions, 4 points de données avec le nombre de dimensions + 1 peuvent exister à égale distance les uns des autres, mais lorsqu'ils sont déposés en 2 dimensions, seuls 3 points de données avec le nombre de dimensions + 1 peuvent exister à des distances égales. Il y a une possibilité d'écraser l'espace qui aurait dû se produire lorsque le nombre de dimensions est réduit. C'est le problème du surpeuplement.
T-SNE a essayé de résoudre ces problèmes.
Afin de résoudre les problèmes de SNE, les fonctionnalités suivantes ont été ajoutées à t-SNE.
--Synchroniser la fonction de perte
La proximité du point $ x_ {i} $ et du point $ x_ {j} $ est exprimée par la distribution de probabilité simultanée $ p_ {ij} $ comme traitement de symétrie de la fonction de perte. (Notez que la symétrie est une probabilité simultanée plutôt qu'une probabilité conditionnelle)
p_{ij} = \frac{p_{i|j} + p_{j|i}}{2n}
p_{j|i} = \frac{\exp(-||x_{i} - x_{j}||^2/2\sigma_{i}^2)}{\sum_{k\neq i}\exp(-||x_{i} - x_{k}||^2/2\sigma_{i}^2)}
De plus, la proximité du point $ y_ {i} $ et du point $ y_ {j} $ sur la dimension inférieure est exprimée par la distribution de probabilité simultanée $ q_ {ij} $ comme suit.
q_{ij} = \frac{(1+||y_{i} - y_{j}||^2)^{-1}}{\sum_{k\neq i}(1+||y_{i} - y_{j}||^2)^{-1}}
Ici, en considérant la distance des points sur la dimension inférieure, nous supposons une distribution de Student t avec un degré de liberté de $ 1 $. ** La distribution t est caractérisée par une base plus élevée que la distribution normale **. En utilisant une distribution de base t élevée, les points de données à moyenne portée peuvent être modélisés comme des points de données à moyenne portée dans un espace de grande dimension et des distances plus longues dans un espace de faible dimension, et ** les problèmes d'encombrement peuvent être évités pour les points de données à moyenne portée. Je peux le faire. ** **
t-SNE utilise ces $ p_ {ij} $ et $ q_ {ij} $ pour minimiser la fonction de perte. La fonction de perte est exprimée comme suit.
C = \sum_{i}KL(P ||Q) = \sum_{i} \sum_{j} p_{ji}\log\frac{p_{ji}}{q_{ji}}
Ceci est également optimisé en utilisant la méthode de descente de gradient stochastique comme dans SNE.
\frac{\delta C}{\delta y_{i}} = 4\sum_{j}(p_{ji}-q_{ji})(y_{i}-y_{j})(1+||y_{i} - y_{j}||^2)^{-1}
La formule de mise à jour est la même que SNE.
Cette fois, j'aimerais visualiser la situation de distribution à l'aide de données textuelles. Les données textuelles ont tendance à être de grande dimension lorsqu'elles sont vectorisées, de sorte que l'algorithme de réduction de dimension est très efficace.
scikit-learn 0.21.3
Cette fois, je pense que le jeu de données sera utilisé pour visualiser l'état de la distribution des données à l'aide du "corpus de news liveoor". Pour plus de détails sur l'ensemble de données et la méthode d'analyse morphologique, veuillez consulter Publié dans l'article précédemment publié. Je vais.
Dans le cas du japonais, un prétraitement qui décompose les phrases en éléments morphologiques est nécessaire à l'avance, donc après avoir décomposé toutes les phrases en éléments morphologiques, elles sont déposées dans la trame de données suivante.
Après avoir vectorisé les données textuelles avec TF-IDF, elles sont réduites à deux dimensions en utilisant t-SNE.
import pickle
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd
#On suppose que la trame de données après décomposition morphologique a déjà été décapée.
with open('df_wakati.pickle', 'rb') as f:
df = pickle.load(f)
#tf-Vectorisation utilisant idf
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(df[3])
#t-Réduction de dimension avec SNE
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, random_state = 0, perplexity = 30, n_iter = 1000)
X_embedded = tsne.fit_transform(X)
ddf = pd.concat([df, pd.DataFrame(X_embedded, columns = ['col1', 'col2'])], axis = 1)
article_list = ddf[1].unique()
colors = ["r", "g", "b", "c", "m", "y", "k", "orange","pink"]
plt.figure(figsize = (30, 30))
for i , v in enumerate(article_list):
tmp_df = ddf[ddf[1] == v]
plt.scatter(tmp_df['col1'],
tmp_df['col2'],
label = v,
color = colors[i])
plt.legend(fontsize = 30)
Le résultat est là. Il est possible de visualiser l'existence de clusters pour chaque support d'article.
Next Je pense que ce serait bien de résumer d'autres algorithmes de réduction de dimension. Merci d'avoir lu jusqu'au bout.
Recommended Posts