我尝试在 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)
有人知道这个问题的原因是什么以及如何解决这个问题吗?
附言我使用的是 scikit-learn 的 0.16.1
版本。但是我在旧版本中也遇到了这个问题。我是在 Ubuntu 下做的。
已添加
今天我尝试了另一个估算器 (KernelRidge
),但我得到了相同的错误消息。我认为几个月前我尝试使用 scipy 求解线性方程组,但我遇到了同样的错误。我需要补充一点,我尝试过的例子总是很小(因此,问题的大小不应该是错误的原因)。在其他计算机上(在工作中)我也有 Ubunutu 并使用 scikit-learn 并且我没有他们的这个问题。所以,看来我的家用笔记本电脑有问题。
最佳答案
有点冒险,但您的笔记本电脑是否有 AMD CPU?
AMD 已取消对 3DNow! 的支持!来自他们更新的处理器的指令(source),Ubuntu 和 Debian bugtracker 的拖网显示许多人正在被(eg 1,2,3,4,5)击中。
Scikit-learn 建立在 numpy 之上,后者又使用 OpenBLAS 或 Atlas 等库在计算机的特定硬件上尽可能高效地执行计算。
但是,为 Debian 和 Ubuntu 编译的默认版本针对的是较旧的 CPU,基于 future 的处理器将能够为较旧的处理器执行代码,但反过来通常情况并非如此。
然而,在这种情况下,较新的 AMD CPU 已删除指令,因此尽管具有有效的 Python 代码,但您仍会收到 Illegal instruction
错误,因为底层库正在尝试使用较旧的指令不再存在。
如果发生这种情况,那么解决方法是为笔记本电脑中的实际处理器构建 numpy 和 OpenBLAS,而不是 Debian 提供的通用处理器。虽然此示例适用于 Ubuntu,但 https://hunseblog.wordpress.com/2014/09/15/installing-numpy-and-openblas/ 给出的说明对于 Debian 应该工作得很好。
关于python - 为什么 scikit-learn 会导致核心转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30440426/