【问题标题】:can't use scikit-learn - "AttributeError: 'module' object has no attribute ..."无法使用 scikit-learn -“AttributeError:‘模块’对象没有属性……”
【发布时间】:2013-05-20 13:57:22
【问题描述】:

我正在尝试关注 scikit-learn 的 this tutorial(线性回归)。

我通过pip install -U scikit-learn安装了scikit,我使用python 2.7和Ubuntu 13.04

当我尝试在那里运行第一行代码时,我得到一个错误,并且每次我尝试使用 scikit-learn 运行任何东西时都会发生这种情况。

import pylab as pl
import numpy as np
from sklearn import datasets, linear_model

# Load the diabetes dataset
diabetes = datasets.load_diabetes()

我得到以下信息:

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

当我尝试时:

regr = linear_model.LinearRegression()

我明白了:

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

在我看来,要么是我使用了错误的包(但我是从他们的教程中复制的),要么是我安装了错误的东西(但成功加载了包)。

谁能帮忙?

【问题讨论】:

  • from sklearn.linear_model import LinearRegression 有效吗?这是推荐的导入方式。
  • 感谢 larsmans,也试过了。经过大量挖掘后,我发现安装了另一个(坏)版本的 sklearn(除了安装的 pip 之外),这就是导致问题的原因。我删除了它,用 pip 重新安装以防万一,现在一切正常。

标签: python-2.7 scikit-learn


【解决方案1】:

好的..终于找到了..在这里发布以防有人遇到同样的问题。

我在不同的目录中有另一个版本的 sklearn(可能是因为 apt-get install)。它以某种方式部分安装,但它是加载的。

请务必查看您的 pip 脚本的输出以查看它在哪里安装包,当您从 python 加载它时,请检查 sklearn.__path__ 以查看它是从哪里获取的。

【讨论】:

  • 为什么 load_diabetes() 数据集没有标记?拥有未标记的轴/未标记的数据不是数据科学中的大罪吗?我正在将糖尿病数据集用于一个强制性的学校项目,但我找不到可以帮助我理解所有这些浮点数代表什么的单一来源,这非常令人沮丧!在我看来,鉴于多年来有多少不同的教授解释了未标记的轴是数学中的一个主要罪过,没有表示列代表什么的 keys() fnct 的数据集似乎并没有很遥远一样糟糕..
  • 如何从正确的位置加载包?
【解决方案2】:

这对我有用:

from sklearn.datasets import make_moons

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,但后来我意识到我的程序名称是 sklearn.py 。如果有人看到这种类型的错误,还要检查您的程序名称是否与包名称不同,否则您将得到module object has no attribute error,如问题所示。

    【讨论】:

      【解决方案4】:

      这个问题的另一个原因(不是 OP 代码的问题)——但让我感到困惑的一个原因是 python 不会自动导入子包或模块,除非包开发人员明确这样做。而sklearn 不会自动导入它的子包,所以如果你有

      import sklearn 
      diabetes = sklearn.datasets.load_diabetes()
      

      然后你会得到

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

      这是一个高度误导性的错误消息,因为sklearn 确实有一个名为datasets子包 - 您只需要显式导入它

      import sklearn.datasets 
      diabetes = sklearn.datasets.load_diabetes()
      

      【讨论】:

      • 这正是问题所在,我安装和卸载了很多次但没有成功,但直接导入子包有效,:(
      【解决方案5】:

      似乎从 sklearn 加载的包是来自分发库的包,而不是从 pip 安装的包。我(debian)的解决方案是重新安装 pip 包。这可以通过以下方式检查:

      import sklearn
      sklearn.__path__
      

      如果这显示/usr/lib/python/,那么它是在使用分布。

      通过卸载并重新安装 sklearn 解决了问题。

       $ pip uninstall scikit-learn
       $ pip install scikit-learn
      

      【讨论】:

        【解决方案6】:

        我遇到了类似的问题,这篇文章是:

        "*** AttributeError: 'GaussianProcessRegressor' 对象没有属性 '_y_train_mean"

        当我更新 scikit-learn 并加载一个腌制模型并尝试使用该模型进行预测时。我只需要重新训练模型,它就解决了我的问题。

        【讨论】:

          【解决方案7】:

          试试这个:

          from sklearn.datasets import load_diabetes
          diabetes = load_diabetes()
          

          【讨论】:

            【解决方案8】:

            我遇到了类似的问题,并尝试根据 Nick Coghlan 的 this article 进行故障排除,因为建议的答案似乎都无法解决我的问题。

            我掉进了所谓的“双重进口陷阱”。我所拥有的是这样的:

            import sklearn
            import sklearn.preprocessing
            

            通过删除其中一个导入并重置我的工作区,我设法解决了问题。

            【讨论】:

              【解决方案9】:

              我通过插入以下代码行解决了这个问题:

              import sklearn 
              from sklearn.linear_model import LinearRegression
              

              【讨论】:

                【解决方案10】:

                我将 python 文件命名为 sklearn.py,这就是我出现此 ATTRIBUTEERROR 的原因。 重命名并解决它。

                【讨论】:

                  猜你喜欢
                  • 2019-07-03
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-11-18
                  相关资源
                  最近更新 更多