ImportError:没有名为sklearn.cross_validation的模块


174

我在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,则可能是模块名称错误。
CKM

11
我真的只是在重复一遍,但是从现在开始,您必须使用sklearn.model_selection。自sklearn 20+起,cross_validation不可用
MichalMikuláši19年

Answers:


582

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


8
这绝对应该是选择的答案
rhys_jsk '19

这应该是公认的答案。到我发帖时,它不仅有效,而且投票数超过200到4。
杰里·德斯特朗普斯

为何sklearn开发人员不使用别名以实现向后兼容性?此外,对于旧版本的文档应说明这种重构:scikit-learn.org/0.16/modules/generated/...
flow2k

像魅力一样工作
omah94

139

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

from sklearn.model_selection import train_test_split

它应该工作


43

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

而已。


这就是答案。你真棒。
Biswajit Panday

35

确保已安装Anaconda,然后使用conda创建virtualenv。这将确保所有进口工作

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吗?
arthurckl 2015年

好吧,我建议您安装它。但是您也可以尝试sudo apt-get install python-sklearn,它应该可以工作。
理查德·鲁布廖夫2015年

7
@DimaLituiev的回答在这里确实是正确的答案。此问题主要与重命名有关,而不是与真正缺少的软件包有关。
Amrinder Arora

2
不一定需要。您建议仅为一个已重命名的软件包安装新的环境,我想说这种解决方案是过大的。Dima的解决方案应标记为正确答案
MuhsinFatih

我想这个问题应该已经解决了,如果他先进行“ import sklearn”工作还是不工作。如果可行,也许这不是命名问题。
ju。





9

过去:(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



4

像这样更改代码

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

4

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

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

2

前一段时间不推荐使用cross_validation,请尝试使用model_selection将其切换出来


尝试在答案中添加更多解释,以提供更多价值。
Zeina

2

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

码:

from sklearn.model_selection import train_test_split

0

我们要么将scikit-learn降级到最新的兼容版本。这可以在激活conda环境之后完成。使用以下命令降级scikit-learn:

pip uninstall scikit-learn
pip install scikit-learn==0.19.2

要么

当我们不想降级scikit-learn时。然后我们都知道在新版本的scikit-learn中已不赞成使用“ cross_validation”名称,而在新的anaconda版本中已将其替换为“ model_selection”。因此,我们可能会收到警告甚至错误。

为了避免这种情况,我们只需要替换:

from sklearn.cross_validation import train_test_split

from sklearn.model_selection import train_test_split 

希望这将有助于解决问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.