ImportError: ไม่มีโมดูลชื่อ sklearn.cross_validation


174

ฉันใช้ python 2.7 ใน Ubuntu 14.04 ฉันติดตั้ง 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

แต่เมื่อฉันนำเข้าแพ็คเกจเหล่านี้:

from sklearn.cross_validation import train_test_split

มันส่งกลับข้อผิดพลาดนี้ให้ฉัน:

ImportError: No module named sklearn.cross_validation

ฉันต้องทำอะไร?


อาจเป็นชื่อโมดูลของคุณผิดถ้าคุณได้ติดตั้ง sklearn และอนาคอนดาอย่างถูกต้อง
CKM

11
ฉันแค่ทำซ้ำจริงๆ แต่คุณต้องใช้ sklearn.model_selection นับจากนี้เป็นต้นไป cross_validation ไม่สามารถใช้งานได้ตั้งแต่ sklearn 20+
Michal Mikuláši

คำตอบ:


583

มันจะต้องเกี่ยวข้องกับการเปลี่ยนชื่อและการเลิกใช้งานของโมดูลย่อยเพื่อcross_validation model_selectionลองเปลี่ยนcross_validationเป็นmodel_selection


8
นี่ควรเป็นคำตอบที่เลือกแน่นอน
rhys_jsk

นี่ควรเป็นคำตอบที่ยอมรับได้ ไม่เพียงทำงานได้ แต่คะแนนมากกว่า 200 ถึง 4 ณ เวลาที่โพสต์ของฉัน
Jerry Destremps

ทำไมนักพัฒนาซอฟต์แวร์ที่ไม่เข้าใจได้ใส่ชื่อแทนเพื่อความเข้ากันได้แบบย้อนหลัง นอกจากนี้สำหรับ doc ว่ารุ่นเก่าควรจะระบุ refactor นี้: scikit-learn.org/0.16/modules/generated/...
flow2k

ทำงานอย่างมีเสน่ห์
omah94

139

train_test_split ขณะนี้อยู่ใน model_selection เพียงพิมพ์:

from sklearn.model_selection import train_test_split

มันควรจะทำงาน


43

ฉันเดาว่าการเลือกข้ามจะไม่ทำงานอีกต่อไป เราควรใช้การเลือกรูปแบบแทน คุณสามารถเขียนให้ทำงานfrom sklearn.model_selection import train_test_split

แค่นั้นแหละ.


นี่คือคำตอบ คุณยอดเยี่ยม
Biswajit Panday

35

ตรวจสอบให้แน่ใจว่าคุณมีงูใหญ่ติดตั้งแล้วสร้าง virtualenv ใช้ CONDA สิ่งนี้จะทำให้มั่นใจว่าการนำเข้าทั้งหมดจะทำงานได้

Python 2.7.9 |Anaconda 2.2.0 (64-bit)| (default, Mar  9 2015, 16:20:48) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>> from sklearn.cross_validation import train_test_split

ไม่ฉันไม่มีมันฉันจำเป็นต้องติดตั้ง Anaconda ใช่ไหม
arthurckl

ฉันอยากจะแนะนำให้คุณติดตั้ง แต่คุณสามารถลอง sudo apt-get install python-sklearn ได้ด้วย
Richard Rublev

7
คำตอบโดย @DimaLituiev เป็นคำตอบที่ถูกต้องจริงๆ ปัญหานี้ส่วนใหญ่เกี่ยวข้องกับการเปลี่ยนชื่อไม่ใช่แพ็คเกจที่ขาดหายไปจริง
Amrinder Arora

2
ไม่จำเป็นต้องทำเช่นนี้ คุณกำลังแนะนำให้ติดตั้งสภาพแวดล้อมใหม่สำหรับแพ็คเกจที่ถูกเปลี่ยนชื่อฉันจะบอกว่าวิธีนี้เป็นปัญหามากเกินไป คำตอบของ Dima ควรถูกทำเครื่องหมายเป็นคำตอบที่ถูกต้อง
MuhsinFatih

ฉันเดาคำถามควรตอบถ้าเขา "นำเข้า sklearn" ทำงานหรือไม่ก่อน หากใช้งานได้อาจเป็นปัญหาการตั้งชื่อไม่ได้
จู

24

sklearn.cross_validation ตอนนี้เปลี่ยนเป็น sklearn.model_selection

เพียงแค่ใช้

from sklearn.model_selection import train_test_split

ฉันคิดว่ามันจะทำงาน



15

อาจเป็นเพราะการคัดค้าน sklearn.cross_validation โปรดแทนที่ sklearn.cross_validation ด้วย sklearn.model_selection

Ref- https://github.com/amueller/scipy_2015_sklearn_tutorial/issues/60


1
ดูเหมือนว่าคำตอบของคุณเหมือนกับที่ได้รับก่อนหน้านี้ในเธรดเดียวกัน หากคุณคิดว่าคำตอบนั้นสามารถปรับปรุงได้ให้พิจารณาแก้ไขแทนการสร้างคำตอบใหม่ให้กับคำถามเดียวกัน
Johan

@Johan วิธีที่ฉันไม่เห็นคำตอบอื่น ๆ ฉันสามารถลบคำตอบของฉันหากคุณต้องการ
nantitv

12

แบ่งชุดข้อมูลออกเป็นชุดการฝึกซ้อมและชุดการทดสอบ

from sklearn.model_selection import train_test_split

2
วิธีการแก้ปัญหาเช่นเดียวกับคำตอบของ sony ayat ullah
Eric Aya

9

ที่ผ่านมา: from sklearn.cross_validation (แพ็กเกจนี้เลิกใช้ในรุ่น 0.18 จาก 0.20 เป็นต้นไปจะถูกเปลี่ยนเป็น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


7

sklearn.cross_validation ตอนนี้เปลี่ยนเป็น sklearn.model_selection

เพียงแค่เปลี่ยน

sklearn.cross_validation

ถึง

sklearn.model_selection


4

หากคุณมีรหัสที่ต้องใช้งานหลาย ๆ เวอร์ชันคุณสามารถทำสิ่งนี้ได้:

import sklearn
if sklearn.__version__ > '0.18':
    from sklearn.model_selection import train_test_split
else:
    from sklearn.cross_validation import train_test_split

สิ่งนี้ไม่เหมาะเนื่องจากคุณกำลังเปรียบเทียบรุ่นของแพ็คเกจเป็นสตริงซึ่งโดยปกติจะใช้งานได้ แต่อาจไม่ได้ผลเสมอไป หากคุณยินดีที่จะติดตั้ง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

2

cross_validation ถูกเลิกใช้มาแล้วลองเปลี่ยนเป็น model_selection


ลองเพิ่มคำอธิบายเพิ่มเติมให้กับคำตอบของคุณเพื่อเพิ่มคุณค่าให้มากขึ้น
Zeina

2

train_test_splitเป็นส่วนหนึ่งของโมดูลsklearn.model_selectionดังนั้นคุณอาจต้องนำเข้าโมดูลจากmodel_selection

รหัส:

from sklearn.model_selection import train_test_split

0

เราอาจจะลดระดับ scikit เรียนรู้เป็นรุ่นล่าสุดที่เข้ากันได้ และสิ่งนี้สามารถทำได้หลังจากเปิดใช้งานสภาพแวดล้อมของ conda ใช้คำสั่งต่อไปนี้เพื่อดาวน์เกรด scikit-learn:

pip uninstall scikit-learn
pip install scikit-learn==0.19.2

หรือ

เมื่อเราไม่ต้องการลดระดับ scikit เรียนรู้ จากนั้นเราทุกคนรู้ว่าชื่อ "cross_validation" ถูกคัดค้านใน Scikit-Learn รุ่นที่ใหม่กว่าและถูกแทนที่ด้วย "model_selection" ในรุ่นอนาคอนดาใหม่ ดังนั้นเราอาจได้รับคำเตือนหรือแม้แต่ข้อผิดพลาด

เพื่อหลีกเลี่ยงปัญหานี้เราเพียงแค่ต้องเปลี่ยน:

from sklearn.cross_validation import train_test_split

ถึง

from sklearn.model_selection import train_test_split 

หวังว่านี่จะช่วยในการแก้ไขปัญหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.