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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超过40个功能导致kernelpca scikit学习错误相关的知识,希望对你有一定的参考价值。

当我将内核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_componentsKernelPCA参数设置为大于数据中要素数的数字。

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

以上是关于超过40个功能导致kernelpca scikit学习错误的主要内容,如果未能解决你的问题,请参考以下文章

如何减少 Scikit-Learn Vectorizer 的内存使用量?

使用 scikit 学习重构误差分析的快速 ICA

关于 sklearn.decomposition.KernelPCA的简单介绍

PCA碎石图PCA+正确的维度个数增量PCA(IncrementalPCA)随机PCA(Randomized PCA)KernelPCA

使用 scikit-learn 预测单个值会导致 ValueError

scikit-learn SVM 可以有很多样本/小批量吗?