【发布时间】:2023-04-02 18:40:01
【问题描述】:
我在我创建的机器学习管道中使用 scikit-learn 的 LDA 分类器对 2 类一维数据进行分类。发生以下异常:
ValueError:内部工作数组大小计算失败:-10
在以下行:
LinearDiscriminantAnalysis.fit(X,y)
其中 X = [-5e15, -5e15, -5e15, 5.7e16] 和 y = [0, 0, 0, 1],均为 float64 数据类型
另外,控制台还打印了以下错误:
英特尔 MKL 错误:进入 DGESDD 时参数 10 不正确
通过 Google 快速搜索后,dgesdd 是 LAPACK 中的一个函数,其中 scikit-learn relies upon。 dgesdd documentation 告诉我们该函数计算实数 M×N 矩阵 A 的 singular value decomposition (SVD)。
回到最初的异常,我发现它是在 _compute_lwork 函数的scipy.linalg.lapack.py 中引发的。这个函数将一个函数作为输入,在这种情况下我相信它是 dgesdd 函数。 dgesdd 文档页面上的 CTRL-F "-10" 给出了这个错误代码背后的逻辑,但我不知道 Fortran,所以我不确定它的含义。
我想打赌 SVD 计算失败是由于 (1) X 数组中的大值,或 (2) X 数组中的 3 个值是完全相同的数字这一事实。
我将继续阅读 SVD 及其局限性。任何有关如何避免此错误的见解将不胜感激。
这是error的截图
【问题讨论】:
-
您能否提供一个失败的示例。最近,由于过时的 BLAS 例程,人们开始遇到 scipy 问题。但是,它与 OpenBLAS 相关,而不是 MKL。
-
抱歉,您所说的“示例”具体是什么意思?我已在我收到的错误帖子中添加了屏幕截图。
-
我的意思是,有一段代码可以很容易地复制粘贴并给出完全相同的错误,这很好。此外,很高兴知道您拥有什么环境(库版本等)
标签: python scipy lapack svd intel-mkl