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

标签 python scikit-learn coredump

我尝试在 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 12345)击中。

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/

相关文章:

python - 从所选标签返回对象列表

python - 使用 Python 和 lmfit 拟合复杂模型?

scikit-learn - 随机搜索与 GridSearchCV

python - 在 0 和 1 之间进行归一化,忽略 NaN

docker - 如何在 docker 容器中禁用核心文件转储

python - itertools 库中的 tee() 函数

javascript - 如何使用 Google Visualization 创建包含子列的表格?

python - 在为 Keras NN 做准备时应用 StandardScaler() 时遇到问题

核心在断言中转储

ubuntu : vmlinuz or crash file not a supported file format 上的崩溃转储