Можно ли использовать ядро ​​PCA для выбора функций?

9

Можно ли использовать анализ основных компонентов ядра (kPCA) для скрытого семантического индексирования (LSI) таким же образом, как используется PCA?

Я выполняю LSI в R с использованием prcompфункции PCA и извлекаю функции с самыми высокими нагрузками из первых компонентов. Таким образом, я получаю функции, описывающие компонент лучше всего.К

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

user3683
источник
Вы пробовали функцию princomp?
Мариана Софер

Ответы:

6

Я думаю, что ответ на ваш вопрос отрицательный: это невозможно.

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

Но в ядре PCA каждый главный компонент представляет собой линейную комбинацию характеристик в целевом пространстве , и, например, для ядра Гаусса (которое часто используется) целевое пространство является бесконечномерным. Таким образом, концепция «нагрузок» на самом деле не имеет смысла для kPCA, и на самом деле основные компоненты ядра вычисляются напрямую, минуя вычисление главных осей (которые для стандартного PCA даны в R 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

Отвечает ли это на ваш вопрос?

Lalas
источник
я попытался повернуть (kpca), думая, что это то же самое, что prcomp $ вращение; which is (по форме R help (prcomp)): «вращение: матрица переменных нагрузок (т. е. матрица, столбцы которой содержат собственные векторы)». Однако это не так. Вопрос, однако, также подразумевается очень общий, потому что я не уверен, возможен ли LSA / LSI с использованием нелинейного уменьшения размерности вообще.
user3683
извините, но я могу пропустить вопрос; Почему вы думаете, что нелинейное уменьшение размерности невозможно в LSA / LSI?
Лалас
1
потому что нет линейной комбинации измерений, а зависит от функции ядра. Можно ли в этой настройке определить вес, который имеет одно измерение для (нелинейного) главного компонента?
user3683
2
(-1) Это может быть полезным фрагментом кода, но я не думаю, что он вообще отвечает на оригинальный вопрос.
амеба