Ist es möglich, Kernel-PCA für die Funktionsauswahl zu verwenden?

9

Ist es möglich, die Kernel-Hauptkomponentenanalyse (kPCA) für die latente semantische Indizierung (LSI) auf dieselbe Weise wie die PCA zu verwenden?

Ich führe LSI in R mit der prcompPCA-Funktion durch und extrahiere die Merkmale mit den höchsten Belastungen aus den ersten Komponenten. Dadurch erhalte ich die Funktionen, die die Komponente am besten beschreiben.k

Ich habe versucht, die kpcaFunktion (aus dem kernlibPaket) zu verwenden, kann jedoch nicht sehen, wie auf die Gewichte der Features einer Hauptkomponente zugegriffen werden kann. Ist dies bei Verwendung von Kernel-Methoden insgesamt möglich?

user3683
quelle
Haben Sie die Princomp-Funktion ausprobiert?
Mariana Soffer

Antworten:

6

Ich denke, die Antwort auf Ihre Frage ist negativ: Es ist nicht möglich.

Standard-PCA kann für die Merkmalsauswahl verwendet werden, da jede Hauptkomponente eine lineare Kombination von Originalmerkmalen ist und man sehen kann, welche Originalmerkmale am meisten zu den wichtigsten Hauptkomponenten beitragen, siehe z. B. hier: Verwenden der Hauptkomponentenanalyse (PCA) für Funktionsauswahl .

In der Kernel-PCA ist jede Hauptkomponente eine lineare Kombination von Merkmalen im Zielraum , und zum Beispiel für den Gaußschen Kernel (der häufig verwendet wird) ist der Zielraum unendlich dimensional. Das Konzept der "Ladungen" ist für kPCA also nicht wirklich sinnvoll, und tatsächlich werden die Kernel-Hauptkomponenten direkt berechnet, wobei die Berechnung der Hauptachsen (die für Standard-PCA in R durch angegeben sind prcomp$rotation) insgesamt umgangen wird , dank dessen, was als bekannt ist Kernel-Trick . Siehe zB hier: Entspricht die Kernel-PCA mit linearem Kernel der Standard-PCA? für mehr Details.

Also nein, das ist nicht möglich. Zumindest gibt es keinen einfachen Weg.

Amöbe
quelle
2
(+1) Ich denke, es ist einfacher, dies mit einer Analogie zu SVMs zu erklären, bei der Sie im linearen Raum die Gewichte berechnen können, die jede Variable zur trennenden Hyperebene beiträgt (ein bisschen ein wichtiges Maß, das zumindest für die Merkmalsauswahl verwendet werden kann), während dies im Kernelraum der Fall ist zu komplex oder absolut unmöglich zu tun. Gleiche Logik hier.
Firebug
2

Das folgende Beispiel (aus dem Kernlab-Referenzhandbuch) zeigt Ihnen, wie Sie auf die verschiedenen Komponenten der Kernel-PCA zugreifen können:

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

Beantwortet das deine Frage?

Lalas
quelle
Ich habe versucht, gedreht (kpca) und dachte, es ist dasselbe wie prcomp $ rotation. Dies ist (aus R help (prcomp)): "Rotation: Die Matrix variabler Belastungen (dh eine Matrix, deren Spalten die Eigenvektoren enthalten)." Dies ist jedoch nicht der Fall. Die Frage ist jedoch auch sehr allgemein gemeint, da ich nicht sicher bin, ob LSA / LSI überhaupt mit nichtlinearer Dimensionsreduktion möglich ist.
user3683
Entschuldigung, aber mir fehlt möglicherweise die Frage. Warum ist Ihrer Meinung nach eine nichtlineare Dimensionsreduktion in LSA / LSI nicht möglich?
Lalas
1
weil es keine lineare Kombination der Dimensionen gibt, sondern eine, die von einer Kernelfunktion abhängt. Ist es in dieser Einstellung möglich, das Gewicht einer Dimension für eine (nichtlineare) Hauptkomponente zu bestimmen?
user3683
2
(-1) Dies mag ein nützlicher Code-Ausschnitt sein, aber ich glaube nicht, dass er die ursprüngliche Frage überhaupt beantwortet.
Amöbe