Czy do wyboru funkcji można użyć jądra PCA?

9

Czy można używać analizy głównych składników jądra (kPCA) do latentnego indeksowania semantycznego (LSI) w taki sam sposób, jak w przypadku PCA?

Wykonuję LSI in R za pomocą prcompfunkcji PCA i wydobywam cechy z najwyższymi obciążeniami od pierwszegokskładniki. Dzięki temu uzyskuję funkcje najlepiej opisujące komponent.

Próbowałem użyć kpcafunkcji (z kernlibpakietu), ale nie mogę zobaczyć, jak uzyskać dostęp do wag funkcji do głównego komponentu. Czy jest to ogólnie możliwe przy użyciu metod jądra?

user3683
źródło
Próbowałeś już funkcji princomp?
mariana soffer

Odpowiedzi:

6

Myślę, że odpowiedź na twoje pytanie jest przecząca: nie jest to możliwe.

Do wyboru funkcji można użyć standardowego PCA, ponieważ każdy główny składnik jest liniową kombinacją oryginalnych elementów, dzięki czemu można zobaczyć, które oryginalne elementy najbardziej przyczyniają się do najbardziej widocznych głównych elementów, patrz np. Tutaj: Korzystanie z analizy głównego składnika (PCA) dla wybór funkcji .

Ale w PCA jądra każdy główny składnik jest liniową kombinacją cech w przestrzeni docelowej , a dla np. Jądra Gaussa (często używanego) przestrzeń docelowa jest nieskończona. Tak więc koncepcja „obciążeń” nie ma tak naprawdę sensu dla kPCA, a w rzeczywistości główne składniki jądra są obliczane bezpośrednio, pomijając obliczenia głównych osi (które dla standardowego PCA są podane w R przez prcomp$rotation) całkowicie, dzięki tak zwanemu sztuczka jądra . Zobacz np. Tutaj: Czy jądro PCA z liniowym jądrem jest równoważne standardowemu PCA? po więcej szczegółów.

Więc nie, nie jest to możliwe. Przynajmniej nie ma łatwego sposobu.

ameba
źródło
2
(+1) Myślę, że łatwiej to wytłumaczyć przez analogię do SVM, gdzie w przestrzeni liniowej można obliczyć wagi, które każda zmienna przyczynia się do oddzielenia hiperpłaszczyzny (rodzaj miary, przydatnej przynajmniej do wyboru cech), podczas gdy w przestrzeniach jądra jest to zbyt skomplikowane lub wręcz niemożliwe do zrobienia. Ta sama logika tutaj.
Firebug
2

Poniższy przykład (zaczerpnięty z podręcznika kernlab) pokazuje, jak uzyskać dostęp do różnych komponentów PCA jądra:

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

Czy to odpowiada na twoje pytanie?

Lalas
źródło
próbowałem rotated (kpca) myśląc, że to to samo co rotacja prcomp $; który jest (wzięty z pomocy R (prcomp)): „rotacja: macierz zmiennych ładunków (tj. macierz, której kolumny zawierają wektory własne)”. Jednak tak nie jest. Pytanie to ma jednak również bardzo ogólny charakter, ponieważ nie jestem pewien, czy LSA / LSI jest możliwe przy użyciu nieliniowej redukcji wymiarowości.
user3683,
przepraszam, ale może mi brakować pytania; Jak myślisz, dlaczego nieliniowa redukcja wymiarów nie jest możliwa w LSA / LSI?
Lalas
1
ponieważ nie ma liniowej kombinacji wymiarów, ale takiej, która zależy od funkcji jądra. Czy w tym ustawieniu można określić wagę jednego wymiaru dla (nieliniowego) składnika głównego?
user3683,
2
(-1) Może to być przydatny fragment kodu, ale nie sądzę, aby w ogóle odpowiadał na oryginalne pytanie.
ameba