【问题标题】:ImportError:没有名为 sklearn.cross_validation 的模块
【发布时间】:2015-08-20 11:06:25
【问题描述】:

我在 Ubuntu 14.04 中使用 python 2.7。我使用以下命令安装了 scikit-learn、numpy 和 matplotlib:

sudo apt-get install build-essential python-dev python-numpy \
python-numpy-dev python-scipy libatlas-dev g++ python-matplotlib \
ipython

但是当我导入这些包时:

from sklearn.cross_validation import train_test_split

它返回给我这个错误:

ImportError: No module named sklearn.cross_validation

我需要做什么?

【问题讨论】:

  • 如果你正确安装了sklearn和anaconda,可能你的模块名是错误的。
  • 我真的只是重复一遍,但从现在开始你必须使用 sklearn.model_selection。自 sklearn 20+ 起,cross_validation 不可用
  • 哇 13 个回答都说了同样的话。第一个之后的最近 4 年(我想如果位会随着时间而褪色)

标签: python scikit-learn


【解决方案1】:

cross_validation 不再可用。

尝试使用model_selection 而不是cross_validation

from sklearn.model_selection import train_test_split

【讨论】:

    【解决方案2】:

    train_test_split 是模块sklearn.model_selection 的一部分,因此,您可能需要从model_selection 导入模块

    代码:

    from sklearn.model_selection import train_test_split
    

    【讨论】:

      【解决方案3】:

      如果您的代码需要运行各种版本,您可以执行以下操作:

      import sklearn
      if sklearn.__version__ > '0.18':
          from sklearn.model_selection import train_test_split
      else:
          from sklearn.cross_validation import train_test_split
      

      但这并不理想,因为您将包版本作为字符串进行比较,这通常有效,但并非总是如此。如果你愿意安装packaging,这是一个更好的方法:

      from packaging.version import parse
      import sklearn
      if parse(sklearn.__version__) > parse('0.18'):
          from sklearn.model_selection import train_test_split
      else:
          from sklearn.cross_validation import train_test_split
      

      【讨论】:

        【解决方案4】:

        确保您安装了Anaconda,然后安装了create a virtualenv using conda。这将确保所有导入工作

        Python 2.7.9 |Anaconda 2.2.0 (64-bit)| (default, Mar  9 2015, 16:20:48) 
        [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
        Type "help", "copyright", "credits" or "license" for more information.
        Anaconda is brought to you by Continuum Analytics.
        Please check out: http://continuum.io/thanks and https://binstar.org
        >>> from sklearn.cross_validation import train_test_split
        

        【讨论】:

        • 不,我没有,我需要安装 Anaconda?
        • 好吧,我建议你安装它。但你也可以尝试 sudo apt-get install python-sklearn,应该可以。
        • @DimaLituiev 的答案在这里确实是正确的答案。这个问题主要与重命名有关,而不是真正的丢失包。
        • 这不是必须的。您建议仅为一个重命名的软件包安装一个新环境,我会说这个解决方案有点矫枉过正。 Dima 的解决方案应标记为正确答案
        • 我想这个问题应该已经解决了,如果他有“import sklearn”工作或没有先工作。如果可行,也许这不是命名问题。
        【解决方案5】:

        像这样修改代码

        # from sklearn.cross_validation import train_test_split
        from sklearn.model_selection import train_test_split
        

        【讨论】:

          【解决方案6】:

          它必须与cross_validation 子模块到model_selection 的重命名和弃用有关。尝试将cross_validation 替换为model_selection

          【讨论】:

          • 为什么 sklearn 开发人员没有为向后兼容添加别名?此外,旧版本的文档应该指出这个重构:scikit-learn.org/0.16/modules/generated/…
          • 因为通过 API 更改使代码无法运行是基于 python 的数据科学最喜欢的功能之一 ;-)(请参阅 Pandas 十年版本 0.x 更改)
          【解决方案7】:

          sklearn.cross_validation 现已更改为 sklearn.model_selection

          只是改变

          sklearn.cross_validation
          

          sklearn.model_selection
          

          【讨论】:

            【解决方案8】:

            cross_validation 前段时间已弃用,请尝试使用 model_selection 将其关闭

            【讨论】:

            • 尝试为您的答案添加更多解释以赋予其更多价值。
            【解决方案9】:

            sklearn.cross_validation 现已更改为 sklearn.model_selection

            随便用

            from sklearn.model_selection import train_test_split
            

            我认为这会奏效。

            【讨论】:

              【解决方案10】:
              sklearn.cross_validation
              

              已改为

              sklearn.model_selection
              

              在此处查看文档: https://scikit-learn.org/stable/modules/cross_validation.html

              【讨论】:

                【解决方案11】:

                我猜交叉选择不再有效。我们应该改用模型选择。你可以写运行,from sklearn.model_selection import train_test_split

                就是这样。

                【讨论】:

                • 这就是答案。你太棒了。
                【解决方案12】:

                过去:from sklearn.cross_validation (这个包在 0.18 版本中被弃用,从 0.20 开始改为from sklearn import model_selection)。

                现在:from sklearn import model_selection

                示例 2:

                过去:from sklearn.cross_validation import cross_val_score(0.18 版已弃用)

                现在:from sklearn.model_selection import cross_val_score

                【讨论】:

                  【解决方案13】:

                  将数据集拆分为训练集和测试集

                  from sklearn.model_selection import train_test_split
                  

                  【讨论】:

                  • 与 ayat ullah sony 的答案相同的解决方案。
                  【解决方案14】:

                  train_test_split 现在在 model_selection 中。只需输入:

                  from sklearn.model_selection import train_test_split
                  

                  它应该可以工作

                  【讨论】:

                    【解决方案15】:

                    可能是因为弃用了 sklearn.cross_validation。 请将 sklearn.cross_validation 替换为 sklearn.model_selection

                    参考- https://github.com/amueller/scipy_2015_sklearn_tutorial/issues/60

                    【讨论】:

                    • 看来您的答案是同一线程中的same as a previous given。如果您认为该答案可以改进,请考虑 editing 它,而不是对同一问题做出新的回答。
                    • @Johan 我怎么没看到其他答案。如果你愿意,我可以删除我的答案。