iPython (python 2) - ImportError: No module named model_selection

Posted

技术标签:

【中文标题】iPython (python 2) - ImportError: No module named model_selection【英文标题】: 【发布时间】:2017-02-10 18:22:42 【问题描述】:

iPython 笔记本 Python 2

抱怨这条线:

from sklearn.model_selection import train_test_split

为什么模型选择不起作用?

【问题讨论】:

您的工作目录中是否有一个名为sklearn.py 的脚本?也许您是从该脚本而不是实际的 sklearn 包中导入的。 据我所知没有 运行import sklearn; print(sklearn.__file__) 并查看输出。如果输出指向您的python 版本的site-packages,那么您安装sklearn 的方式有问题。在这种情况下,您可能需要重新安装它。否则,如果您的输出不是site-packages,那么您将在某个不是模块本身的地方导入一些脚本。在这种情况下,您的快速解决方法是先退出控制台,重命名该脚本,然后返回控制台再试一次。 输出:/Users/******/anaconda/lib/python2.7/site-packages/sklearn/__init__.pyc 除了重新安装软件包之外,我建议检查软件包版本以确保它是最新的。如果您使用的版本号 (sklearn.__version__) 低于 0.18,那么您将不得不使用旧的 cross_validation 模块而不是 model_selection 模块。基本上from sklearn.cross_validation import train_test_split. 【参考方案1】:

为了解决这个问题,您需要首先确定您是否正在导入实际的 sklearn 包,而不仅仅是保存在工作目录某处的名为 sklearn.py 的脚本。 Python 导入模块的方式有点类似于它在命名空间中查找变量的方式(LocalEnclosedGlobalBuilt-in)。在这种情况下,Python 将首先查看当前目录,然后查看site-packages 来开始导入模块。如果它在当前工作目录中查找并找到与您尝试导入的模块同名的 python 脚本,那么它将导入该脚本而不是实际模块。

您通常可以通过检查其__file____path__ 属性来确定实际模块是否已导入:

import sklearn

print(sklearn.__file__)
print(sklearn.__path__)

查看这些打印语句的输出将告诉您导入的包是您要使用的模块,还是只是位于您工作目录某处的某个脚本。如果输出不指向您的 Python 版本的site-packages,那么您已经在某个不是模块本身的地方导入了一些脚本。您的快速解决方法是先退出控制台,重命名 .py 脚本及其编译版本(.pyc 文件),然后返回控制台重试。

但是,如果输出指向您的 python 版本的站点包,那么首先安装包的方式有问题。在这种情况下,您可能需要更新或重新安装它。

特别是这个,原来问题出在你使用的sklearn的版本上;因为sklearn 中的model_selection 模块在0.18+ 版本中可用。如果您使用的版本号 (sklearn.__version__) 低于 0.18,那么您将不得不使用旧的 cross_validation 模块而不是 model_selection 模块:

from sklearn.cross_validation import train_test_split

您也可以使用您喜欢的包管理系统升级到最新版本的包。

我希望这会有所帮助。

【讨论】:

以上是关于iPython (python 2) - ImportError: No module named model_selection的主要内容,如果未能解决你的问题,请参考以下文章

ipython和python之间的输出差异

ipython安装

Ipython的pip安装文档

利用Python进行数据分析:IPython

利用Python进行数据分析——Ipython

ipython的安装