Je veux regrouper un ensemble de données massif pour lequel je n'ai que les distances par paire. J'ai implémenté un algorithme k-medoids, mais cela prend trop de temps à exécuter, donc je voudrais commencer par réduire la dimension de mon problème en appliquant PCA. Cependant, la seule façon que je connaisse pour exécuter cette méthode est d'utiliser la matrice de covariance que je n'ai pas dans ma situation.
Existe-t-il un moyen d'appliquer l'APC en connaissant uniquement les distances par paires?
pca
dimensionality-reduction
multidimensional-scaling
grand arbre
la source
la source
Réponses:
Mise à jour: j'ai entièrement supprimé ma réponse d'origine, car elle était basée sur une confusion entre les distances euclidiennes et les produits scalaires. Ceci est une nouvelle version de ma réponse. Mes excuses.
Si par distances par paires, vous voulez dire les distances euclidiennes, alors oui, il existe un moyen d'effectuer l'ACP et de trouver les principaux composants. Je décris l'algorithme dans ma réponse à la question suivante: Quelle est la différence entre l'analyse des composants principaux et la mise à l'échelle multidimensionnelle?
Très brièvement, la matrice des distances euclidiennes peut être convertie en une matrice de Gram centrée, qui peut être directement utilisée pour effectuer l'ACP via la composition par eigendec. Cette procédure est connue sous le nom de mise à l'échelle multidimensionnelle [MDS] .
Si vos distances par paires ne sont pas euclidiennes, vous ne pouvez pas effectuer PCA, mais vous pouvez toujours effectuer MDS, qui ne sera plus équivalent à PCA. Cependant, dans cette situation, MDS est susceptible d'être encore meilleur pour vos besoins.
la source
Il existe une ACP avec une matrice de distance, et elle est appelée mise à l'échelle multidimensionnelle (MDS). Vous pouvez en savoir plus sur wikipedia ou dans ce livre .
Vous pouvez le faire
R
avec la fonction mdscmdscale
. Pour un exemplex
, vous pouvez vérifier celaprcomp(x)
etcmdscale(dist(x))
donner le même résultat (d'oùprcomp
vient l'ACP etdist
calcule simplement les distances euclidiennes entre les éléments de x)la source
Cela ressemble à un problème auquel le clustering spectral pourrait être appliqué. Étant donné que vous avez la matrice de distance par paire, vous pouvez définir un graphique entièrement connecté où chaque nœud a N connexions, correspondant à sa distance par rapport à tous les autres nœuds du graphique. À partir de cela, vous pouvez calculer le graphique laplacien (si cela vous semble effrayant, ne vous inquiétez pas - c'est un calcul facile), puis prendre des vecteurs propres des plus petitsvaleurs propres (c'est là qu'il diffère de l'ACP). Si vous prenez 3 vecteurs propres, par exemple, vous aurez alors une matrice Nx3. Dans cet espace, les points devraient (espérons-le) être bien séparés en raison d'une théorie des graphes soignée qui suggère qu'il s'agit d'une coupe optimale pour maximiser le flux (ou la distance, dans ce cas) entre les grappes. De là, vous pouvez utiliser un k-means ou un algorithme similaire pour regrouper en 3 espaces. Je recommande de consulter cette procédure pas à pas pour plus d'informations:
http://arxiv.org/abs/0711.0189
la source
Les distances par paire forment également une matrice carrée, tout comme la matrice de co-variance. PCA est juste SVD ( http://en.wikipedia.org/wiki/Singular_value_decomposition ) appliqué à la matrice de co-variance. Vous devriez toujours être en mesure de réduire les dimensions à l'aide de SVD sur vos données. Je ne sais pas exactement comment interpréter votre sortie, mais c'est certainement quelque chose à essayer. Vous pouvez utiliser des méthodes de clustering telles que k-means ou clustering hiérarchique. Jetez également un œil à d'autres techniques de réduction de dimension telles que la mise à l'échelle multidimensionnelle. Qu'essayez-vous de retirer de vos grappes?
la source