我的数据集具有1000个输入的训练集,具有6个功能。 (数据集大小为1000 * 6)。我将KPCA应用于数据集并将特征数量减少到3.这意味着eignvector矩阵的维数现在为1000 * 3。我使用简化数据集来训练神经网络。在训练网络之后,现在,让我们想象一下我想要对新数据(大小为1 * 6)进行分类。显然我必须将其转换为1 * 3数据,然后将其呈现给网络,但我不知道该怎么做?
答案 0 :(得分:1)
内核PCA首先使用条目
计算内核矩阵K
K_{ij} = KernelFunction(x_i, x_j).
在您的情况下, K
是1000 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}_j
是j
特征向量i
训练样本的系数,x_j
是第j个训练样本,K
是内核使用。