当我将内核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)?
我能够使用其中一个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_components
的KernelPCA
参数设置为大于数据中要素数的数字。
也许你会混淆形状。拥有仅具有41行和77K +特征的数据集似乎很奇怪,而且来自这样的数据集的任何预测建模在功能上都是无用的。我会再次检查数据集的形状,并确保您没有将n_components
的值设置为大于存在的要素数。