ImportError: Không có mô-đun nào có tên model_selection


89

Tôi đang cố gắng sử dụng train_test_splithàm và viết:

from sklearn.model_selection import train_test_split

và điều này gây ra

ImportError: No module named model_selection

Tại sao? Và cách khắc phục?


2
Tôi vừa xảy ra rằng bạn đã không chấp nhận bất kỳ câu trả lời nào trong ít nhất mười câu hỏi cuối cùng của mình. Hãy nhớ rằng việc chấp nhận câu trả lời hữu ích nhất sẽ giúp ích cho người trả lời và những người xem xét câu hỏi của bạn trong tương lai.
linusg

Câu trả lời:


179

Tôi đoán bạn có phiên bản sai của scikit-learn, một tình huống tương tự đã được mô tả ở đây trên GitHub . Trước đây (trước đây v0.18), train_test_splitnằm trong cross_validationmô-đun:

from sklearn.cross_validation import train_test_split

Tuy nhiên, bây giờ nó nằm trong model_selectionmô-đun:

from sklearn.model_selection import train_test_split

vì vậy bạn sẽ cần phiên bản mới nhất.

Để nâng cấp lên phiên bản ít nhất 0.18, hãy làm:

pip install -U scikit-learn

(Hoặc pip3, tùy thuộc vào phiên bản Python của bạn). Nếu bạn đã cài đặt nó theo một cách khác, hãy đảm bảo rằng bạn sử dụng một phương pháp khác để cập nhật, chẳng hạn như khi sử dụng Anaconda.


7
Điều này không hiệu quả với tôi, tuy nhiên giải pháp của Farhard Maleki, "conda update scikit-learning" đã làm được.
Alex Kinman,

Tôi đã chạy lệnh pip mà bạn đưa ra và nó sẽ báo lỗi yêu cầu tôi nâng cấp pip. Sau đó, tôi nâng cấp pip và reran, và nó sẽ cho biết rằng không cần phải nâng cấp sklearn, tôi đã có phiên bản mới nhất (0.17) thậm chí tôi nghĩ rằng không phải vậy. Không cố gắng mặc cả, chỉ cố gắng chia sẻ thông tin.
Alex Kinman,

@AlexKinman Nếu bạn đã cài đặt Python 2 3, hãy đảm bảo sử dụng lệnh "right pip". Bạn có chắc là bạn không có venv hoặc ở đúng nơi không? Điều này nghe có vẻ lạ, bạn có thể mở một trình bao Python và đưa vào import sklearn, sklearn(vâng, chỉ là từ) và sklearn.__version__? Mặc dù nó đã được khắc phục cho bạn, nhưng sẽ rất thú vị khi biết vấn đề đến từ đâu.
linusg

sklearn Out [2]: <module 'sklearn' from 'C: \ Users \ XYZ \ AppData \ Local \ Continuum \ Anaconda2 \ lib \ site-pack \ sklearn_ init_ .pyc'> sklearn .__ version__ Hết [3]: '0,18 .2' Nhưng đây là sau khi tôi đã chạy Conda nâng cấp của sklearn
Alex Kinman

Nhưng dù sao, nó hoạt động tốt cho bạn bây giờ. Tôi đã không sử dụng Anaconda quá nhiều, nhưng tôi đoán nó không tích hợp với pip. Trả lời thay đổi nội dung, tất cả người dùng Anaconda sẽ biết :)
linusg

26

Cập nhật sklearn

conda cập nhật scikit-learning


4
Điều này đã hiệu quả, cách tiếp cận của câu trả lời được chấp nhận thì không. Cảm ơn
Alex Kinman

9

Tôi gặp sự cố này khi nhập GridSearchCV.

Vừa đổi sklearn.model_selectionthành sklearn.grid_search.


6

Tôi đã gặp sự cố tương tự khi sử dụng Jupyter Notebook, bất kể tôi đã cập nhật nội dung gì trong Python 3, tôi không thể truy cập vào Jupyter:

import sklearn
print (sklearn.__version__)
0.17.1

để hiển thị scikit-learning-0.18.1

Cuối cùng, tôi đã gỡ bỏ Anaconda3 và Jupyter Notebook và cài đặt lại mới. Tôi đã nhận nó để làm việc.

http://ukitech.blogspot.com/2017/02/sklearnmodelselection.html


5

bạn có sklearn không? nếu không, hãy làm như sau:

sudo pip install sklearn

Sau khi cài đặt sklearn

from sklearn.model_selection import train_test_split

hoạt động tốt


3

Để cài đặt scikit-learning phiên bản 18.0, tôi đã sử dụng cả hai lệnh:

conda cập nhật scikit-learning

pip install -U scikit-learning

Nhưng nó không hoạt động. Đã xảy ra sự cố "Không thể cài đặt 'scikit-learning'. Đây là một dự án đã cài đặt distutils và do đó chúng tôi không thể xác định chính xác tệp nào thuộc về nó, điều này sẽ chỉ dẫn đến việc gỡ cài đặt một phần".

Cuối cùng, tôi có thể cài đặt nó bằng cách sử dụng lệnh sau:

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


3

Vào cuối tháng 9 năm 2016, SciKit Learn 0.18 đã được phát hành và có một chút thay đổi đối với mã. Với SciKit Learn 0.18, hàm train_test_split hiện được nhập từ model_selection thay vì cross_validation.

from sklearn.cross_validation import train_test_split

đã được thay đổi thành :

from sklearn.model_selection import train_test_split

Điều tương tự cũng đã xảy ra đối với GridSearchCV.


2

Như @linusg đã nói, một tùy chọn chỉ là nhập xác thực chéo như sau:

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

2

Bản phát hành ổn định mới nhất của sklearn 0.20.0 có train_test_split nằm trong model_selection chứ không phải cross_validation

Để kiểm tra phiên bản sklearn của bạn:

nhập bản in sklearn (sklearn. phiên bản ) 0.20.2


1

Thêm một số thông tin vào câu trả lời trước từ @linusg:

sklearngiữ lịch sử phát hành của tất cả các thay đổi của nó. Thỉnh thoảng hãy nghĩ đến việc kiểm tra nó. Đây là liên kết đến tài liệu.

Như bạn có thể thấy trong tài liệu cho phiên bản 0.18 , một mô-đun mới đã được tạo có tên model_selection. Do đó, nó không tồn tại trong các phiên bản trước.

Cập nhật sklearnvà nó sẽ hoạt động!


0

Phiên bản sklearn của bạn quá thấp, model_selectionđược nhập bằng 0.18.1, vì vậy vui lòng cập nhật phiên bản sklearn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.