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

art*_*ckl 108 python scikit-learn

我在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
Run Code Online (Sandbox Code Playgroud)

但是当我导入这些包时:

from sklearn.cross_validation import train_test_split
Run Code Online (Sandbox Code Playgroud)

它返回给我这个错误:

ImportError: No module named sklearn.cross_validation
Run Code Online (Sandbox Code Playgroud)

我需要做什么?

Dim*_*iev 392

它必须与子模块重命名和贬低有关cross_validationmodel_selection.尝试替换cross_validation- >model_selection

  • 为什么这不是选择的正确答案......我想知道. (30认同)
  • 这绝对应该是选择的答案 (6认同)
  • 为什么 sklearn 开发人员不添加别名以实现向后兼容性?此外,旧版本的文档应指示此重构:https://scikit-learn.org/0.16/modules/ generated/sklearn.cross_validation.train_test_split.html。 (5认同)

aya*_*ony 106

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

from sklearn.model_selection import train_test_split
Run Code Online (Sandbox Code Playgroud)

它应该工作


小智 40

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

而已。


Tan*_*ick 20

sklearn.cross_validation 现在更改为 sklearn.model_selection

只需使用

from sklearn.model_selection import train_test_split
Run Code Online (Sandbox Code Playgroud)

我认为这行得通。


Ric*_*lev 18

改为这样做:

from sklearn.model_selection import train_test_split
Run Code Online (Sandbox Code Playgroud)

  • @DimaLituiev的回答在这里确实是正确的答案。此问题主要与重命名有关,而不是与真正缺少的软件包有关。 (5认同)
  • 不一定需要。您建议仅为一个已重命名的软件包安装新的环境,我想说这种解决方案是过大的。Dima的解决方案应标记为正确答案 (2认同)

nan*_*itv 12

可能是由于sklearn.cross_validation的弃用.请用sklearn.model_selection替换sklearn.cross_validation

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

  • 看来您的答案与同一线程中的[与之前给出的相同](/sf/answers/2439104671/)。如果您认为答案可以改进,请考虑[编辑](https://stackoverflow.com/posts/34844352/edit)它,而不是对同一问题提出新答案。 (2认同)

小智 11

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

from sklearn.model_selection import train_test_split
Run Code Online (Sandbox Code Playgroud)

  • 与ayat ullah sony的答案相同的解决方案。 (2认同)

小智 10

不再cross_validation可用。

尝试使用model_selection而不是cross_validation

from sklearn.model_selection import train_test_split
Run Code Online (Sandbox Code Playgroud)


小智 8

过去:(from sklearn.cross_validation 此软件包从0.20开始在0.18版本中已弃用,现已更改为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


jss*_*367 6

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

import sklearn
if sklearn.__version__ > '0.18':
    from sklearn.model_selection import train_test_split
else:
    from sklearn.cross_validation import train_test_split
Run Code Online (Sandbox Code Playgroud)

但这并不理想,因为您将包版本作为字符串进行比较,这通常有效但并非总是如此。如果您愿意安装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
Run Code Online (Sandbox Code Playgroud)


San*_*mal 5

sklearn.cross_validation 现在更改为 sklearn.model_selection

只是改变

sklearn.cross_validation
Run Code Online (Sandbox Code Playgroud)

sklearn.model_selection
Run Code Online (Sandbox Code Playgroud)


Muh*_*bin 5

像这样更改代码

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
Run Code Online (Sandbox Code Playgroud)