超过40个功能导致kernelpca scikit学习错误

问题描述 投票:0回答:1

当我将内核PCA的功能数量设置为40以上时,会出现如下错误:

/opt/conda/lib/python3.6/site-packages/sklearn/decomposition/kernel_pca.py:262: 
RuntimeWarning: invalid value encountered in sqrt
  X_transformed = self.alphas_ * np.sqrt(self.lambdas_)

以下是我使用的代码:

from sklearn.decomposition import PCA, KernelPCA
from sklearn import svm
import numpy as np

print(testX.shape,np.isnan(testX_yaleA.all()),np.isfinite(testX_yaleA.all()))
(41, 77760) False True

kpca_rbf = KernelPCA(41,kernel="rbf", fit_inverse_transform=False, gamma=0.01)
Xtest_kpca = kpca_rbf.fit_transform(testX_yaleA)

我很困惑为什么会发生这种情况,可能是由于阵列的大小(41,77760)?

python numpy scipy scikit-learn feature-extraction
1个回答
1
投票

我能够使用其中一个sklearn数据集复制它。

from sklearn.datasets import load_iris
form sklearn.decomposition import KernelPCA

iris = load_iris()
data = iris.data
target = iris.target
data.shape
(150, 4)

kpca = KernelPCA(4, kernel='rbf', fit_inverse_transform=False, gamma=0.01)
transformed = kpca.fit_transform(data)
transformed.shape
(150, 4)

kpca = KernelPCA(150, kernel='rbf', fit_inverse_transform=False, gamma=0.01)
transformed = kpca.fit_transform(data)
/Users/grr/anaconda/lib/python3.6/site-packages/sklearn/decomposition/kernel_pca.py:264: RuntimeWarning: invalid value encountered in sqrt
  X_transformed = self.alphas_ * np.sqrt(self.lambdas_)
transformed.shape
(150, 150)

这让我相信的是,您将n_componentsKernelPCA参数设置为大于数据中要素数的数字。

也许你会混淆形状。拥有仅具有41行和77K +特征的数据集似乎很奇怪,而且来自这样的数据集的任何预测建模在功能上都是无用的。我会再次检查数据集的形状,并确保您没有将n_components的值设置为大于存在的要素数。

© www.soinside.com 2019 - 2024. All rights reserved.