可以使用内核PCA进行功能选择吗?


9

是否可以以与使用PCA相同的方式将内核主成分分析(kPCA)用于潜在语义索引(LSI)?

我使用prcompPCA功能在R中执行LSI,并从第一个中提取负载最大的功能k组件。这样,我就可以最好地描述组件的功能。

我试图使用该kpca功能(从kernlib包装中获取),但看不到如何访问要素的权重。使用内核方法时,总体上可能吗?


您是否尝试过princomp函数?
mariana soffer 2011年

Answers:


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

这回答了你的问题了吗?


我试过rotated(kpca)认为与prcomp $ rotation相同;这是(取自R help(prcomp)形式):“旋转:可变载荷矩阵(即,其列包含特征向量的矩阵)。” 但是事实并非如此。但是,这个问题也很笼统,因为我不确定使用非线性降维是否可以实现LSA / LSI。
user3683 2011年

对不起,但我可能会遗漏这个问题;您为什么认为在LSA / LSI中无法进行非线性降维?
Lalas

1
因为没有维的线性组合,而是取决于内核函数的维。在这种设置下,是否可以确定一维对(非线性)主分量的重量?
user3683 2011年

2
(-1)这可能是一个有用的代码段,但我认为它根本无法回答原始问题。
变形虫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.