ImportError:没有名为model_selection的模块


89

我正在尝试使用train_test_split函数并编写:

from sklearn.model_selection import train_test_split

这导致

ImportError: No module named model_selection

为什么?以及如何克服?


2
在我看来,您至少在最近十个问题中没有接受任何答案。请记住,接受最有帮助的答案将有助于回答者和将来寻找您问题的人们。
linusg '16

Answers:


179

我想您的版本错误scikit-learnGitHub上也描述了类似的情况。先前(位于之前v0.18train_test_split位于cross_validation模块中:

from sklearn.cross_validation import train_test_split

但是,现在在model_selection模块中:

from sklearn.model_selection import train_test_split

因此您需要最新版本。

要升级到至少版本0.18,请执行以下操作:

pip install -U scikit-learn

(或者pip3,取决于您的Python版本)。如果以其他方式安装了它,请确保使用其他方法进行更新,例如在使用Anaconda时。


7
这对我没有用,但是Farhard Maleki的解决方案“ conda update scikit-learn”起作用了。
Alex Kinman

我运行了您给出的pip命令,这将引发错误,要求我升级pip。然后我升级了pip并重新运行,它会告诉您不需要升级sklearn,即使不是这样,我也已经有了最新版本(0.17)。不试图讨价还价,只是试图分享信息。
亚历克斯·金曼

@AlexKinman如果已安装Python 2 3,请确保使用“ right pip”命令。您确定您没有静脉或处于正确的静脉吗?这听起来很奇怪,您可以打开Python shell并放入import sklearnsklearn(是的,只是这个词)和sklearn.__version__?即使它已为您解决,也很想知道问题的出处。
linusg '17

sklearn Out [2]:<模块'sklearn'from'C:\ Users \ XYZ \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-packages \ sklearn_ init_ .pyc'> sklearn .__ version__ Out [3]:'0.18 .2' 但这是在我对sklearn进行Conda升级之后
Alex

不管怎样,很好,它现在对您有效。我没有使用Anaconda太多,但是我猜它并没有与pip集成。答案已编辑,所有Anaconda用户都将知道:)
linusg


9

导入时遇到此问题GridSearchCV

刚刚更改sklearn.model_selectionsklearn.grid_search



5

你有sklearn吗?如果不是,请执行以下操作:

sudo pip install sklearn

安装sklearn之后

from sklearn.model_selection import train_test_split

工作良好


3

要安装scikit-learn 18.0版,我使用了两个命令:

康达更新scikit学习

点安装-U scikit-learn

但这是行不通的。出现一个问题“无法安装'scikit-learn'。这是一个distutils安装的项目,因此我们无法准确确定属于该文件的文件,而这只会导致部分卸载”。

最后,我可以使用以下命令进行安装:

pip install --user --upgrade scikit-learn == 0.18.0


3

2016年9月下旬,发布了SciKit Learn 0.18,并且代码略有更改。现在,使用SciKit Learn 0.18,可以从model_selection而不是cross_validation导入train_test_split函数。

from sklearn.cross_validation import train_test_split

已更改为:

from sklearn.model_selection import train_test_split

GridSearchCV也发生了同样的情况。


2

正如@linusg所说,一种选择就是导入交叉验证,如下所示:

from sklearn import cross_validation
X_train,X_test,y_train,y_test = cross_validation.train_test_split(X,y,test_size=0.3)


1

@linusg的先前答案中添加一些信息

sklearn保留所有更改的发布历史记录。考虑不时检查它。是文档的链接。

如您在版本0.18的文档中所见,创建了一个名为的新模块model_selection。因此,它在以前的版本中不存在。

更新sklearn,它将起作用!


0

您的sklearn版本过低,model_selection是由0.18.1导入的,因此请更新sklearn版本。

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.