Est-il possible d'utiliser le noyau PCA pour la sélection des fonctionnalités?

9

Est-il possible d'utiliser l'analyse du composant principal du noyau (kPCA) pour l'indexation sémantique latente (LSI) de la même manière que PCA est utilisé?

J'exécute LSI dans R en utilisant la prcompfonction PCA et j'extrais les caractéristiques avec les charges les plus élevées à partir des premiers composants. Par cela, j'obtiens les fonctionnalités décrivant le mieux le composant.k

J'ai essayé d'utiliser la kpcafonction (à partir du kernlibpackage) mais je ne vois pas comment accéder aux poids des fonctionnalités à un composant principal. Est-ce globalement possible lors de l'utilisation des méthodes du noyau?

user3683
la source
Avez-vous essayé la fonction princomp?
mariana soffer

Réponses:

6

Je pense que la réponse à votre question est négative: ce n'est pas possible.

La PCA standard peut être utilisée pour la sélection des fonctionnalités, car chaque composant principal est une combinaison linéaire de fonctionnalités originales, et donc on peut voir quelles fonctionnalités originales contribuent le plus aux composants principaux les plus importants, voir par exemple ici: Utilisation de l'analyse des composants principaux (PCA) pour sélection des fonctionnalités .

Mais dans le noyau PCA, chaque composant principal est une combinaison linéaire de caractéristiques dans l'espace cible , et par exemple pour le noyau gaussien (qui est souvent utilisé), l'espace cible est de dimension infinie. Donc, le concept de "chargements" n'a pas vraiment de sens pour kPCA, et en fait, les composants principaux du noyau sont calculés directement, en contournant le calcul des axes principaux (qui pour PCA standard sont donnés dans R par prcomp$rotation), grâce à ce qu'on appelle astuce du noyau . Voir par exemple ici: Le noyau PCA avec noyau linéaire est-il équivalent au PCA standard? pour plus de détails.

Donc non, ce n'est pas possible. Au moins, il n'y a pas de moyen facile.

amibe
la source
2
(+1) Je pense qu'il est plus facile d'expliquer avec une analogie avec les SVM, où dans l'espace linéaire, vous pouvez calculer les poids chaque variable contribue à l'hyperplan de séparation (un peu une mesure d'importance, utilisable pour la sélection des fonctionnalités au moins) tandis que dans les espaces du noyau, c'est trop complexe ou carrément impossible à faire. Même logique ici.
Firebug
2

L'exemple suivant (tiré du manuel de référence de kernlab) vous montre comment accéder aux différents composants de la PCA du noyau:

data(iris)
test <- sample(1:50,20)
kpc <- kpca(~.,data=iris[-test,-5],kernel="rbfdot",kpar=list(sigma=0.2),features=2)

pcv(kpc)        # returns the principal component vectors
eig(kpc)        # returns the eigenvalues
rotated(kpc)    # returns the data projected in the (kernel) pca space
kernelf(kpc)    # returns the kernel used when kpca was performed

Est-ce que cela répond à votre question?

Lalas
la source
j'ai essayé la rotation (kpca) pensant que c'est la même chose que la rotation prcomp $; qui est (sous forme R help (prcomp)): "rotation: la matrice des chargements variables (ie, une matrice dont les colonnes contiennent les vecteurs propres)." Mais ce n'est pas le cas. La question est cependant aussi très générale car je ne suis pas sûr que LSA / LSI soit possible en utilisant la réduction de dimensionnalité non linéaire.
user3683
désolé, mais je manque peut-être la question; Pourquoi pensez-vous que la réduction de dimensionnalité non linéaire n'est pas possible en LSA / LSI?
Lalas
1
car il n'y a pas de combinaison linéaire des dimensions mais qui dépend d'une fonction du noyau. Est-il possible dans ce cadre de déterminer le poids d'une dimension pour une composante principale (non linéaire)?
user3683
2
(-1) Cela pourrait être un extrait de code utile, mais je ne pense pas qu'il réponde à la question d'origine.
amoeba