2016-10-02 62 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 

你也可以升級到包的最新版本與您首選的包裹管理系統。

我希望這是有幫助的。

相關問題