为什么 scikit-learn 会导致核心转储?

Why does scikit-learn cause core dumped?

我尝试 运行 scikit-learn 中的简单线性拟合:

from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

结果我得到:

Illegal instruction (core dumped)

有人知道这个问题的原因是什么以及如何解决这个问题吗?

P.S。我使用的是 scikit-learn 的 0.16.1 版本。但是我在旧版本中也遇到了这个问题。我在 Ubuntu.

下进行

已添加

今天我尝试了另一个估算器 (KernelRidge),但我得到了同样的错误信息。我认为几个月前我尝试使用 scipy 求解线性方程组,但我遇到了同样的错误。我需要补充一点,我尝试过的例子总是很小(因此,问题的大小不应该是错误的原因)。在其他计算机上(在工作中)我也有 Ubunutu 并使用 scikit-learn 并且我没有他们的这个问题。所以,看来我的家用笔记本电脑有问题。

这里有点冒险,但你的笔记本电脑有没有 AMD CPU?

AMD 已取消对 3DNow 的支持!来自他们更新的处理器 (source), which a trawl of Ubuntu and Debian bugtrackers shows that many people are being hit by (eg 1, 2, 3, 4, 5) 的指令。

Scikit-learn 建立在 numpy 之上,后者又使用 OpenBLAS 或 Atlas 等库在计算机的特定硬件上尽可能高效地执行计算。

然而,为 Debian 和 Ubuntu 编译的默认版本针对较旧的 CPUs,基于未来的处理器将能够为较旧的处理器执行代码,但这通常不是反之亦然。

然而,在这种情况下,较新的 AMD CPUs 已删除指令,因此尽管具有有效的 python 代码,但您仍会收到 Illegal instruction 错误,因为底层库正在尝试使用不再存在的旧指令。

如果发生这种情况,则解决方法是为笔记本电脑中的实际处理器构建 numpy 和 OpenBLAS,而不是 Debian 提供的通用处理器。尽管此示例适用于 Ubuntu,但 https://hunseblog.wordpress.com/2014/09/15/installing-numpy-and-openblas/ 给出的说明对于 Debian 应该可以正常工作。

这是 "python-scikits-learn" 包的所有依赖项的列表:

  • python-scikits.statsmodels
  • python-skimage
  • python-skimage-doc
  • python-skimage-lib
  • python-sklearn
  • python-sklearn-doc
  • python-sklearn-lib

如果满足所有依赖项但您的程序仍然无法运行,您应该卸载这些二进制文件并从源安装,手动安装将检测系统的正确设置。

您也可以尝试重新安装软件包:

sudo apt-get autoremove python-scikits-learn
sudo apt-get install python-scikits-learn

此致

您需要卸载它,手动删除文件夹,因为卸载不能正常清理。 就我而言,我卸载了 scikit-learn-0.17.1 并安装了 scikit-learn-0.18.1

pip uninstall scikit-learn
rm -rf ~/venv/lib/python2.7/site-packages/sklearn/
pip uninstall scikit-learn