【问题标题】:sklearn doesn't have attribute 'datasets'sklearn 没有属性“数据集”
【发布时间】:2017-05-18 23:10:15
【问题描述】:

我已经开始在我的工作中使用 sckikit-learn。所以我正在查看tutorial,它提供了加载一些数据集的标准程序:

$ python
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> digits = datasets.load_digits()

不过,为了方便起见,我尝试通过以下方式加载数据:

In [1]: import sklearn

In [2]: iris = sklearn.datasets.load_iris()

但是,这会引发以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-db77d2036db5> in <module>()
----> 1 iris = sklearn.datasets.load_iris()

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

但是,如果我使用明显相似的方法:

In [3]: from sklearn import datasets

In [4]: iris = datasets.load_iris()

它可以正常工作。事实上,以下方法也有效:

In [5]: iris = sklearn.datasets.load_iris()

我对此完全感到困惑。我错过了一些非常微不足道的东西吗?这两种方法有什么区别?

【问题讨论】:

  • 试试sudo pip install --upgrade sklearn
  • @DaveQ:这没有帮助。反正我有 0.18.1

标签: python python-3.x machine-learning scikit-learn


【解决方案1】:

sklearn 是一个packageThis answer说的很简洁:

当您导入一个包时,只有该包的__init__.py 文件中的变量/函数/类是直接可见的,而不是子包或模块。

datasetssklearn 的子包。这就是发生这种情况的原因:

In [1]: import sklearn

In [2]: sklearn.datasets
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-325a2bfc35d0> in <module>()
----> 1 sklearn.datasets

AttributeError: module 'sklearn' has no attribute 'datasets'

但是,这样做的原因:

In [3]: from sklearn import datasets

In [4]: sklearn.datasets
Out[4]: <module 'sklearn.datasets' from '/home/ethan/.virtualenvs/test3/lib/python3.5/site-packages/sklearn/datasets/__init__.py'>

是当您通过执行from sklearn import datasets 加载子包datasets 时,它会自动添加到包sklearn 的命名空间中。这是鲜为人知的"traps" of the Python import system 之一。

另外,请注意,如果您查看__init__.py for sklearn,您看到'datasets'__all__ 的成员,但这仅允许您这样做:

In [1]: from sklearn import *
In [2]: datasets
Out[2]: <module 'sklearn.datasets' from '/home/ethan/.virtualenvs/test3/lib/python3.5/site-packages/sklearn/datasets/__init__.py'>

最后要注意的一点是,如果您检查sklearndatasets,您会看到,尽管它们是包,但它们的类型是module。这是因为所有包都被视为模块 - 但是,并非所有模块都是包。

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 1970-01-01
    • 2018-03-16
    • 2021-11-07
    • 2020-09-30
    • 2017-03-02
    • 2021-07-28
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多