导入 scikit-learn 模块时出错

Posted

技术标签:

【中文标题】导入 scikit-learn 模块时出错【英文标题】:Error importing scikit-learn modules 【发布时间】:2015-08-26 07:00:05 【问题描述】:

我正在尝试从集群模块调用一个函数,如下所示:

import sklearn
db = sklearn.cluster.DBSCAN()

我收到以下错误:

AttributeError: 'module' object has no attribute 'cluster'

在 IPython 中完成制表符,我似乎可以访问 base、clone、externals、re、setup_module、sys 和 warning 模块。没有别的,虽然其他(包括集群)在 sklearn 目录中。

遵循以下 pbu 的建议并使用

from sklearn import cluster

我明白了:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    from sklearn import cluster
  File "C:\Python34\lib\site-packages\sklearn\cluster\__init__.py", line 6, in <module>
    from .spectral import spectral_clustering, SpectralClustering
  File "C:\Python34\lib\site-packages\sklearn\cluster\spectral.py", line 13, in <module>
    from ..utils import check_random_state, as_float_array
  File "C:\Python34\lib\site-packages\sklearn\utils\__init__.py", line 16, in <module>
    from .class_weight import compute_class_weight, compute_sample_weight
  File "C:\Python34\lib\site-packages\sklearn\utils\class_weight.py", line 7, in <module>
    from ..utils.fixes import in1d
  File "C:\Python34\lib\site-packages\sklearn\utils\fixes.py", line 318, in <module>
    from scipy.sparse.linalg import lsqr as sparse_lsqr
  File "C:\Python34\lib\site-packages\scipy\sparse\linalg\__init__.py", line 109, in <module>
    from .isolve import *
  File "C:\Python34\lib\site-packages\scipy\sparse\linalg\isolve\__init__.py", line 6, in <module>
    from .iterative import *
  File "C:\Python34\lib\site-packages\scipy\sparse\linalg\isolve\iterative.py", line 7, in <module>
    from . import _iterative
ImportError: DLL load failed: The specified module could not be found.

我在 Windows 上使用 Python 3.4,scikit-learn 0.16.1。

【问题讨论】:

看不懂,sklearn怎么导入? 为什么不重新安装?可能是 sklearn 已损坏。 【参考方案1】:

将此行放在python文件的顶部

from sklearn import cluster

应该这样做:))

【讨论】:

这会产生不同的错误;查看原始帖子的更新。【参考方案2】:

问题在于 scipy/numpy 安装。我一直在使用来自http://www.lfd.uci.edu/~gohlke/pythonlibs/ 的(通常非常好!)非官方安装程序。从那里卸载/重新安装没有区别,但使用官方安装程序(链接自 http://www.scipy.org/install.html)安装就可以了。

【讨论】:

Numpy 在 lfd.uci.edu/~gohlke/pythonlibs 为我工作,但 scipy 很尴尬,不得不从 sourceforge 下载 win32 superpack.exe。不过现在都在工作。谢谢乔恩。【参考方案3】:

你可能不使用 Numpy+MKL,而只使用 Numpy。

我遇到了同样的问题并用 MKL 重新安装了 Numpy

pip install --upgrade --force-reinstall "numpy‑1.16.3+mkl‑cp37‑cp37m‑win32.whl"

修复它。

注意:将文件更新到最新版本,可能是 64 位 - 请参阅 the list of available Windows binaries

【讨论】:

如果你在 64 位上运行,你可以从 lfd.uci.edu/~gohlke/pythonlibs/#numpy 安装 Numpy + NKL【参考方案4】:

我使用anaconda 在加载 Orange 或 PlotNine 时遇到与 OP 相同的错误。 我不记得什么时候开始发生这种情况。

在 DependencyWalk 中缺少跟踪 Anaconda3\Lib\site-packages\scipy\special\_ufuncs.cp36-win32.pydlibifcoremd.dlllibmmd.dll 的依赖关系。在anaconda根目录中搜索它们,它们位于ICC_RT和一个版本的MKL包中。

Anaconda3\pkgs\mkl-2017.0.3-0\Library\bin添加到PATH,似乎修复了SciPy和NumPy相关的DLL加载失败,上面的包又开始工作了。

我仍然不知道如何正确解决此问题。显然,缺点是 MKL 包可以更新,版本可能会改变,路径也会改变。在这方面它与添加非托管包同样不方便。

重新安装ICC_RT为我解决了这个问题,libmmd.dll和相关的dll之后会自动复制到anaconda3/library/bin,然后通过activate命令自动添加到PATH。以前所有与 numpy/scipy 相关的 cant load DLL 错误现在都消失了。

【讨论】:

【参考方案5】:

从错误日志看,scipy模块是最新的模块导入失败

  File "C:\Python34\lib\site-packages\sklearn\utils\fixes.py", line 318, in <module>
    from scipy.sparse.linalg import lsqr as sparse_lsqr
  File "C:\Python34\lib\site-packages\scipy\sparse\linalg\__init__.py", line 109, in <module>
    from .isolve import *
  File "C:\Python34\lib\site-packages\scipy\sparse\linalg\isolve\__init__.py", line 6, in <module>
    from .iterative import *
  File "C:\Python34\lib\site-packages\scipy\sparse\linalg\isolve\iterative.py", line 7, in <module>
    from . import _iterative
ImportError: DLL load failed: The specified module could not be found.

我有同样的错误,显示相同的日志,当我卸载/安装 scipy 时问题就消失了:

pip uninstall scipy
pip install scipy

【讨论】:

【参考方案6】:

对我来说,修复的是这些命令:

pip uninstall sklearn
pip uninstall scikit-learn
pip uninstall scipy
pip install scipy
pip install scikit-learnhere

【讨论】:

【参考方案7】:

我遇到了同样的问题,并通过安装/更新 mkl 包解决了它:

conda install mkl

pip install mkl

只是为了获取完整信息,这还降级了以下软件包:

以下软件包将被更新:

mkl:          2017.0.4-h6d528fc_0 defaults --> 2018.0.3-1         defaults

以下软件包将被降级:

numpy:        1.11.3-py34_0       defaults --> 1.10.1-py34_0      defaults
pandas:       0.19.2-np111py34_1  defaults --> 0.18.1-np110py34_0 defaults
scikit-learn: 0.18.1-np111py34_1  defaults --> 0.17-np110py34_1   defaults
scipy:        0.19.1-np111py34_0  defaults --> 0.16.0-np110py34_0 defaults

【讨论】:

【参考方案8】:

我努力想弄清楚这一点;尝试从网站下载并安装(非官方)Numpy+MKL 库(有风险/乏味?)。

最终获得成功:

    使用管理员权限登录到命令提示符;如何在这里:https://superuser.com/questions/968214/open-cmd-as-admin-with-windowsr-shortcut

    卸载现有/复杂的 Scipy 和 Numpy 版本 pip uninstall scipy pip uninstall numpy

    全新安装 Scipy 和 Numpy pip install scipy pip install numpy

    运行 Jupyter 笔记本;它对我有用。

消息ImportError: DLL load failed: The specified module could not be found 通知无法识别和获取使用 scikit-learn 库所需的 DLL;全新安装 scipy/numpy 可能会更好地路由从 Jupyter 笔记本代码调用的 DLL 连接。

【讨论】:

【参考方案9】:

下载 microsoft visual c++ 发行版

链接:https://www.microsoft.com/en-in/download/details.aspx?id=53840

vc_redist.x64.exe

在你的电脑上安装并运行这个.exe文件..之后不会出现DLL导入模块错误

现在它可以正常工作了:)

【讨论】:

这个问题是 4 年前报告的,而 Visual C++ 的问题是由于一些 openmp 打包导致的,并且仅对 scikit-learn 0.22 有效

以上是关于导入 scikit-learn 模块时出错的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow 导致 scikit-learn 出错

导入 sklearn 时出现不可排序的类型错误

使用 scikit-learn 执行 LDA 降维时出错

导入 tensorflow 模块时出错

scikit-learn 入门

解析模块说明符时出错:从 API 进行动态导入时做出反应