如何使用内核PCA与神经网络

时间:2016-02-01 19:35:37

标签: machine-learning pca pattern-recognition

我的数据集具有1000个输入的训练集,具有6个功能。 (数据集大小为1000 * 6)。我将KPCA应用于数据集并将特征数量减少到3.这意味着eignvector矩阵的维数现在为1000 * 3。我使用简化数据集来训练神经网络。在训练网络之后,现在,让我们想象一下我想要对新数据(大小为1 * 6)进行分类。显然我必须将其转换为1 * 3数据,然后将其呈现给网络,但我不知道该怎么做?

2 个答案:

答案 0 :(得分:1)

内核PCA首先使用条目

计算内核矩阵K
K_{ij} = KernelFunction(x_i, x_j).
在您的情况下,

K1000 x 1000矩阵。接下来,将矩阵对角化以获得分解

K = W S W^T

(在实践中,人们会执行双重PCA,因为这会导致更小的尺寸,但这并不重要,因为您已经获得了减少)。

现在,减少数据集对应于仅保留特征向量S的对角矩阵中的三个最大条目,而忽略所有其他条目( - 如果这种近似是合理的,则可以很好地选择内核。)

实际上,这意味着在投影矩阵W^T中只保留了第一个L=3行。调用维度为W_L的简化矩阵1000 x 3。现在"减少"与矩阵一起使用的特征数量

K_L = K W_L

其中还有维度1000 x 3。这些行用作训练神经网络的输入。

让我们来回答您的问题:如何处理新的要素向量y

  • 首先,使用元素k计算向量k_i = KernelFunction(x_i, y)
  • 其次,通过计算k_L = k W_L - 这是维1 x 3的向量,将该向量映射到KPCA子空间。
  • 最后,将矢量k_L输入您的神经网络并使用预测。

答案 1 :(得分:0)

您需要将数据投影到缩小的空间。究竟是什么 - 取决于KPCA的特定实现,例如在python和scikit中 - 学习你会做什么

[...]
kpca = KPCA(n_components=3)
kpca.fit(X_train)
[...]

reduced_new_point = kpca.transform(new_point)

并且通常你有一系列与你的每个特征值连接的乘数α,你在i特征向量上的投影是

P(x, i) = SUM alpha^{i}_j K(x_j, x) 

其中alpha^{i}_jj特征向量i训练样本的系数,x_j是第j个训练样本,K是内核使用。