超过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_components
的KernelPCA
参数设置为大于数据中要素数的数字。
也许你会混淆形状。拥有仅具有41行和77K +特征的数据集似乎很奇怪,而且来自这样的数据集的任何预测建模在功能上都是无用的。我会再次检查数据集的形状,并确保您没有将n_components
的值设置为大于存在的要素数。
以上是关于超过40个功能导致kernelpca scikit学习错误的主要内容,如果未能解决你的问题,请参考以下文章
如何减少 Scikit-Learn Vectorizer 的内存使用量?
关于 sklearn.decomposition.KernelPCA的简单介绍
PCA碎石图PCA+正确的维度个数增量PCA(IncrementalPCA)随机PCA(Randomized PCA)KernelPCA