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



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

内核 PCA 首先计算内核矩阵K与条目

K_{ij} = KernelFunction(x_i, x_j).

在您的情况下,K是一个1000 x 1000矩阵。接下来,对矩阵进行对角化以获得分解

K = W S W^T

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

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

实际上,这意味着在投影矩阵中,W^T仅保留前 L=3 行。调用维度为 1000 x 3 的约化矩阵W_L。现在"减少"与使用矩阵相关的特征数量

K_L = K W_L

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

让我们来回答你的问题:如何处理新的特征向量y

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

将数据投影到缩小的空间上。具体如何 - 取决于KPCA的特定实现,例如在python和scikit-learn中你会做的

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

一般来说,您有一个与每个特征值相连的乘数 alpha 序列,并且您在第 i特征向量的投影是

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

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

相关内容

  • 没有找到相关文章

最新更新