2016-10-02 96 views
3

IPython的笔记本 的Python 2IPython的(蟒蛇2) - 导入错误:没有名为model_selection

模块抱怨这一行:

from sklearn.model_selection import train_test_split 

为什么不选型工作?

+1

你有没有可能在你的工作目录中有一个名为'sklearn.py'的脚本?也许你是从该脚本导入而不是实际的'sklearn'软件包。 – Abdou

+0

我没有据我所知 – user1072337

+1

运行'import sklearn;打印(sklearn .__文件__)'并检查输出。如果输出指向你的python版本的'site-packages',那么你安装'sklearn'的方式是错误的。在这种情况下,您可能需要重新安装它。否则,如果你的输出不是'site-packages',那么你在某个地方导入了一些不是模块本身的脚本。在这种情况下,您的快速修复将首先退出控制台,重命名该脚本并返回到控制台并重试。 – Abdou

回答

5

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

通常你可以找到实际的模块是否已通过检查进口其__file____path__属性:

import sklearn 

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

审查这些print语句的输出会告诉你导入的包是否是模块你在你的工作目录的某处,或者只是一些脚本。如果输出结果不指向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 

你也可以升级到包的最新版本与您首选的包裹管理系统。

我希望这是有帮助的。

相关问题