将KernelPCA
应用于我的数据并将其传递给分类器(SVC
)后,我收到以下错误:
执行ValueError:输入包含NaN,无穷大或太大的值 D型细胞(' float64&#39)。
KernelPCA
时和此警告:
RuntimeWarning:在sqrt X_transformed =中遇到无效值 self.alphas_ * np.sqrt(self.lambdas _)
查看转换后的数据,我发现了几个nan
值。
{I}使用kernel
没有区别。我尝试了cosine
,rbf
和linear
。
但有趣的是:
我的原始数据仅包含0到1之间的值(无inf
或nan
),它与MinMaxScaler
应用标准PCA
作品,我认为KernelPCA
与linear
kernel
相同。
更多事实:
任何想法如何克服这个以及可能是什么原因?
答案 0 :(得分:2)
产生NaNs
是因为输入矩阵的特征值(self.lambdas_)是负的,这会引起 ValueError ,因为平方根不会以负值运行。
可以通过设置KernelPCA(remove_zero_eig=True, ...)
来克服此问题,但此类操作不会保留数据的原始维度。使用此参数是最后的手段,因为模型的结果可能会偏斜。
实际上,已经说过负特征值表示模型错误指定,这显然是不好的。在不使用 remove_zero_eig 参数破坏数据维度的情况下规避该事实的可能解决方案可能是减少原始特征的数量,这些特征是相关的。尝试构建相关矩阵并查看这些值是什么。然后,尝试省略冗余功能并再次适合KernelPCA()
。