ImportError: Không có mô-đun có tên sklearn.cross_validation


174

Tôi đang sử dụng python 2.7 trong Ubuntu 14.04. Tôi đã cài đặt scikit-learn, numpy và matplotlib với các lệnh sau:

sudo apt-get install build-essential python-dev python-numpy \
python-numpy-dev python-scipy libatlas-dev g++ python-matplotlib \
ipython

Nhưng khi tôi nhập các gói này:

from sklearn.cross_validation import train_test_split

Nó trả về cho tôi lỗi này:

ImportError: No module named sklearn.cross_validation

Tôi cần làm gì?


có lẽ tên mô-đun của bạn là sai nếu bạn đã cài đặt sklearn và anaconda chính xác.
CKM

11
Tôi thực sự chỉ đang lặp lại nó, nhưng bạn phải sử dụng sklearn.model_selection từ bây giờ. cross_validation không thể sử dụng được vì sklearn 20+
Michal Mikuláši 23/03/19

Câu trả lời:


582

Nó phải liên quan đến việc đổi tên và phản đối của cross_validationmô đun con thành model_selection. Hãy thử thay thế cross_validationđểmodel_selection


8
Đây chắc chắn phải là câu trả lời được chọn
rhys_jsk

Đây phải là câu trả lời được chấp nhận. Nó không chỉ hoạt động, mà số phiếu còn hơn 200 đến 4 tính đến thời điểm đăng bài của tôi.
Jerry Destremps

Tại sao các nhà phát triển sklearn không đặt bí danh cho khả năng tương thích ngược? Ngoài ra, tài liệu cho phiên bản cũ hơn sẽ chỉ ra bộ tái cấu trúc này: scikit-learn.org/0.16/modules/generated/ ,.
Flow2k

làm việc như bùa mê
omah94

139

train_test_split hiện có trong model_selection. Chỉ loại:

from sklearn.model_selection import train_test_split

nó nên hoạt động


43

Tôi đoán lựa chọn chéo không hoạt động nữa. Chúng ta nên sử dụng thay vì lựa chọn mô hình. Bạn có thể viết nó để chạy,from sklearn.model_selection import train_test_split

Đó là nó.


Đây là câu trả lời. Bạn thật tuyệt vời.
Biswajit Panday

35

Hãy chắc chắn rằng bạn đã cài đặt Anaconda và sau đó tạo virtualenv bằng conda . Điều này sẽ đảm bảo tất cả các hoạt động nhập khẩu

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

Không, tôi không có nó, tôi cần cài đặt Anaconda?
arthurckl

Vâng, tôi sẽ đề nghị bạn cài đặt nó. Nhưng bạn cũng có thể thử sudo apt-get install python-sklearn, nó sẽ hoạt động.
Richard Rublev

7
Câu trả lời của @DimaLituiev thực sự là câu trả lời chính xác ở đây. Vấn đề này chủ yếu liên quan đến việc đổi tên, không phải là một gói bị thiếu thực sự.
Amrinder Arora

2
Điều này không nhất thiết cần thiết. Bạn đang đề xuất cài đặt một môi trường mới chỉ cho một gói đã được đổi tên, tôi sẽ nói giải pháp này là quá mức cần thiết. Giải pháp của Dima nên được đánh dấu là câu trả lời đúng
MuhsinFatih

Tôi đoán câu hỏi nên được giải quyết nếu anh ta đã "nhập khẩu sklearn" trước tiên. Nếu nó hoạt động, có thể đây không phải là một vấn đề đặt tên.
ép

24

sklearn.cross_validation bây giờ được đổi thành sklearn.model_selection

Chỉ dùng

from sklearn.model_selection import train_test_split

Tôi nghĩ rằng sẽ làm việc.



15

Có thể là do sự phản đối của sklearn.cross_validation. Vui lòng thay thế sklearn.cross_validation bằng sklearn.model_selection

Tham khảo- https://github.com/amueller/scipy_2015_sklearn_tutorial/issues/60


1
Nó xuất hiện câu trả lời của bạn giống như trước đó trong cùng một chủ đề. Nếu bạn nghĩ rằng câu trả lời có thể được cải thiện, hãy xem xét chỉnh sửa nó thay vì đưa ra câu trả lời mới cho cùng một câu hỏi.
Johan

@Johan Một số cách tôi không thấy câu trả lời khác. Tôi có thể xóa câu trả lời của tôi nếu bạn thích.
nantitv

12

Tách tập dữ liệu vào Tập huấn luyện và Tập kiểm tra

from sklearn.model_selection import train_test_split

2
Giải pháp tương tự như câu trả lời của ayat ullah sony.
Eric Aya

9

Quá khứ: from sklearn.cross_validation (Gói này không được dùng trong phiên bản 0.18 từ 0.20 trở đi, nó được đổi thành from sklearn import model_selection).

Hiện tại: from sklearn import model_selection

Ví dụ 2:

Quá khứ: from sklearn.cross_validation import cross_val_score(Phiên bản 0.18 không dùng nữa)

Hiện tại : from sklearn.model_selection import cross_val_score


7

sklearn.cross_validation bây giờ được đổi thành sklearn.model_selection

Chỉ là sự thay đổi

sklearn.cross_validation

đến

sklearn.model_selection

4

thay đổi mã như thế này

# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split

4

Nếu bạn có mã cần chạy các phiên bản khác nhau, bạn có thể làm một cái gì đó như thế này:

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

Điều này không lý tưởng mặc dù bạn đang so sánh các phiên bản gói dưới dạng chuỗi, thường hoạt động nhưng không phải lúc nào cũng vậy. Nếu bạn sẵn sàng cài đặt packaging, đây là một cách tiếp cận tốt hơn nhiều:

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 đã bị phản đối một thời gian trước đây, hãy thử chuyển đổi nó với model_selection


hãy thử thêm lời giải thích cho câu trả lời của bạn để cho nó nhiều giá trị hơn.
Zeina

2

train_test_splitlà một phần của mô-đun sklearn.model_selection, do đó, bạn có thể cần nhập mô-đun từmodel_selection

Mã số:

from sklearn.model_selection import train_test_split

0

Hoặc là chúng tôi đã hạ cấp scikit-learn xuống phiên bản tương thích gần đây nhất. Và điều này có thể được thực hiện sau khi kích hoạt môi trường conda. Sử dụng các lệnh sau để hạ cấp scikit-learn:

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

HOẶC LÀ

Khi chúng tôi không muốn hạ cấp scikit-learn. Sau đó, tất cả chúng ta đều biết rằng tên "cross_validation" không được dùng trong các phiên bản mới hơn của scikit-learn và đã được thay thế bằng "model_selection" bên trong phiên bản anaconda mới. Do đó, chúng tôi có thể nhận được cảnh báo hoặc thậm chí là một lỗi.

Để tránh điều này, chúng ta chỉ cần thay thế:

from sklearn.cross_validation import train_test_split

đến

from sklearn.model_selection import train_test_split 

Hy vọng, điều này sẽ giúp giải quyết vấn đề.

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.