Чи можливо використовувати ядро ​​PCA для вибору функцій?


9

Чи можливо використовувати аналіз основних компонентів ядра (kPCA) для латентної семантичної індексації (LSI) так само, як використовується PCA?

Я виконую LSI в R за допомогою функції prcompPCA і добуваю функції з найвищими навантаженнями з перших компонентів. Цим я отримую функції, що описують компонент найкраще.k

Я спробував використати kpcaфункцію (з kernlibпакета), але не можу зрозуміти, як отримати доступ до ваги функцій до основного компонента. Чи можливо це взагалі при використанні методів ядра?


Ви спробували функцію принкомпа?
mariana soffer

Відповіді:


6

Я думаю, що відповідь на ваше запитання негативна: це неможливо.

Стандартний PCA може бути використаний для вибору функцій, оскільки кожен головний компонент є лінійною комбінацією оригінальних функцій, і тому можна побачити, які оригінальні функції найбільше сприяють найвизначнішим головним компонентам, див. Наприклад, тут: Використання аналізу основних компонентів (PCA) для вибір функції .

Але в PCA ядра кожен головний компонент є лінійною комбінацією особливостей у цільовому просторі , а для ядра Гаусса (який часто використовується) цільовий простір є нескінченномірним. Таким чином, поняття "навантаження" насправді не має сенсу для kPCA, і фактично основні компоненти ядра обчислюються безпосередньо, минаючи обчислення основних осей (які для стандартних PCA задані в R by prcomp$rotation) взагалі завдяки тому, що відоме як хитрість ядра . Дивіться, наприклад, тут: Чи ядро ​​PCA ядра з лінійним ядром еквівалентно стандартному PCA? для отримання детальної інформації.

Так ні, це неможливо. Принаймні, простого шляху немає.


2
(+1) Я думаю, що це простіше пояснити аналогією SVM, де у лінійному просторі можна обчислити ваги кожної змінної, що сприяє розділенню гіперплана (якась міра важливості, придатна для вибору особливостей), хоча в просторах ядра це занадто складне або відверте неможливо зробити. Тут така ж логіка.
Firebug

2

Наступний приклад (взятий із посібника з kernlab) показує вам, як отримати доступ до різних компонентів ядра PCA:

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

Чи відповідає це на ваше запитання?


я спробував повернути (kpca), думаючи, що це те саме, що і prcomp $ rotatation; який є (прийнято у формі R help (prcomp)): "обертання: матриця змінних навантажень (тобто матриця, стовпці якої містять власні вектори)." Однак це не так. Питання, однак, також має на увазі дуже загальне, тому що я не впевнений, чи можливий LSA / LSI, використовуючи нелінійне зменшення розмірності взагалі.
user3683

вибачте, але я можу пропустити питання; Чому ви вважаєте, що нелінійне зменшення розмірності неможливо в LSA / LSI?
Лалас

1
оскільки немає лінійної комбінації розмірів, а така, яка залежить від функції ядра. Чи можливо в цій установці визначити вагу одного розміру для (нелінійної) основної складової?
user3683

2
(-1) Це може бути корисним фрагментом коду, але я не думаю, що він взагалі відповідає на початкове запитання.
амеба
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.