gpt4 book ai didi

python - KernelPCA 产生 NaN

转载 作者:行者123 更新时间:2023-11-30 08:41:02 33 4
gpt4 key购买 nike

申请后KernelPCA到我的数据并将其传递给分类器 ( SVC ) 我收到以下错误:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

执行 KernelPCA 时出现此警告:

RuntimeWarning: invalid value encountered in sqrt X_transformed = self.alphas_ * np.sqrt(self.lambdas_)

查看转换后的数据,我发现了几个 nan值。

kernel 没有什么区别我在用着。我试过cosine , rbflinear .

但有趣的是:

  • 我的原始数据仅包含 0 到 1 之间的值(没有 infnan ),它使用 MinMaxScaler 进行缩放

  • 应用标准PCA 有效,我认为与 KernelPCA 相同与 linear kernel .

更多事实:

  • 我的数据是高维度的(> 8000 个特征)并且大部分是稀疏的。
  • 我使用的是最新版本的 scikit-learn,18.2

知道如何克服这个问题以及可能的原因是什么?

最佳答案

产生 NaN 是因为输入矩阵的特征值 (self.lambdas_) 为负,这会引发 ValueError,因为平方根不与负值运算。

可以通过设置 KernelPCA(remove_zero_eig=True, ...) 来解决此问题,但此类操作不会保留数据的原始维度。使用此参数是最后的手段,因为模型的结果可能会出现偏差。

实际上,有人指出负特征值表明模型指定错误,这显然是不好的。在不破坏带有 remove_zero_eig 参数的数据维数的情况下回避这一事实的可能解决方案可能是减少原始特征的数量,这些特征具有很大的相关性。尝试构建相关矩阵并查看这些值是什么。然后,尝试省略冗余特征并再次拟合KernelPCA()

关于python - KernelPCA 产生 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44716368/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com