使用sklearn时出现“RuntimeWarning: invalid value returned in matmul ret = a @ b”的原因是什么?

arj*_*ada 7 python numpy linear-regression scikit-learn

Ridge().fit(X_train, y_train)在数据集上使用时遇到了 RuntimeWarning,其中X_train.shape = (9440, 1900)

/Users/username/micromamba/envs/data-science/lib/python3.11/site-packages/sklearn/utils/extmath.py:189: RuntimeWarning: invalid value encountered in matmul
  ret = a @ b
Run Code Online (Sandbox Code Playgroud)

当我减小数据集的大小时,X_train.shape = (1000, 1900)运行时警告就会消失。

可能是什么原因导致此警告以及如何避免它?我确保没有 np.nan、np.inf 和 -np.inf。

Mac*_*ski 4

这个错误在某种程度上是已知的,遗憾的是它依赖于体系结构/环境。这是 numpy 中的一个纯粹的矩阵运算问题。我用以下代码在我的 Colab 中重现了它:

# warning under numpy==1.25, OK under numpy==1.22.4
M = np.random.random((30000, 270)) # on Colab
M.T @ M
Run Code Online (Sandbox Code Playgroud)

@Stef 测试了破坏性的 numpy 版本。

请参阅最近的 GitHub 讨论,我在其中numpy贡献了这个突破性示例。

我创建了这个 Colab 笔记本来帮助解决问题的根源(在numpy==1.22.4Colab 的选择下工作正常)。尝试在 Colab 下进行训练(您可以上传数据)。

总的来说,我的建议是降级 numpy 版本或等待维护人员修复。