lỗi train_test_split (): Tìm thấy các biến đầu vào với số lượng mẫu không nhất quán


21

Khá mới đối với Python nhưng xây dựng mô hình RF đầu tiên của tôi dựa trên một số dữ liệu phân loại. Tôi đã chuyển đổi tất cả các nhãn thành dữ liệu số int64 và được tải vào X và Y dưới dạng một mảng gọn gàng, nhưng tôi gặp lỗi khi tôi đang cố gắng đào tạo các mô hình.

Đây là những mảng của tôi trông như thế nào:

>>> X = np.array([[df.tran_cityname, df.tran_signupos, df.tran_signupchannel, df.tran_vmake, df.tran_vmodel, df.tran_vyear]])

>>> Y = np.array(df['completed_trip_status'].values.tolist())

>>> X
array([[[   1,    1,    2,    3,    1,    1,    1,    1,    1,    3,    1,
            3,    1,    1,    1,    1,    2,    1,    3,    1,    3,    3,
            2,    3,    3,    1,    1,    1,    1],
        [   0,    5,    5,    1,    1,    1,    2,    2,    0,    2,    2,
            3,    1,    2,    5,    5,    2,    1,    2,    2,    2,    2,
            2,    4,    3,    5,    1,    0,    1],
        [   2,    2,    1,    3,    3,    3,    2,    3,    3,    2,    3,
            2,    3,    2,    2,    3,    2,    2,    1,    1,    2,    1,
            2,    2,    1,    2,    3,    1,    1],
        [   0,    0,    0,   42,   17,    8,   42,    0,    0,    0,   22,
            0,   22,    0,    0,   42,    0,    0,    0,    0,   11,    0,
            0,    0,    0,    0,   28,   17,   18],
        [   0,    0,    0,   70,  291,   88,  234,    0,    0,    0,  222,
            0,  222,    0,    0,  234,    0,    0,    0,    0,   89,    0,
            0,    0,    0,    0,   40,  291,  131],
        [   0,    0,    0, 2016, 2016, 2006, 2014,    0,    0,    0, 2015,
            0, 2015,    0,    0, 2015,    0,    0,    0,    0, 2015,    0,
            0,    0,    0,    0, 2016, 2016, 2010]]])

>>> Y
array(['NO', 'NO', 'NO', 'YES', 'NO', 'NO', 'YES', 'NO', 'NO', 'NO', 'NO',
       'NO', 'YES', 'NO', 'NO', 'YES', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO',
       'NO', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO'], 
      dtype='|S3')

>>> X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3)

TracBack (cuộc gọi gần đây nhất vừa qua):

  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/sklearn/cross_validation.py", line

2039, trong tệp train_test_split = Tập tin có thể lập chỉ mục (* mảng) "/L Library / Python /.7 / site-packages / sklearn / utils / validation.py", dòng 206, trong tệp có thể lập chỉ mục check_consistent_length (* result) 2.7 / site-gói / sklearn / utils / verify.py ", dòng 181, trong check_consistent_length" samples:% r "% [int (l) cho l chiều dài])

ValueError: Found input variables with inconsistent numbers of samples: [1, 29]

Trong tương lai, xin vui lòng gửi câu hỏi lập trình lên stackoverflow . Q & A này là về khoa học dữ liệu, không phải lập trình.
Ricardo Cruz

Câu trả lời:


15

Bạn đang gặp phải lỗi đó vì bạn XYkhông có cùng độ dài (đó là những gì train_test_splityêu cầu), nghĩa là , X.shape[0] != Y.shape[0]. Cho mã hiện tại của bạn:

>>> X.shape
(1, 6, 29)
>>> Y.shape
(29,)

Để khắc phục lỗi này:

  1. Xóa danh sách bổ sung từ bên trong np.array()khi xác định Xhoặc xóa kích thước phụ sau đó bằng lệnh sau : X = X.reshape(X.shape[1:]). Bây giờ, hình dạng của Xsẽ là (6, 29).
  2. Chuyển đổi Xbằng cách chạy X = X.transpose()để có được số lượng mẫu bằng nhau trong XY. Bây giờ, hình dạng của Xsẽ là (29, 6) và hình dạng của Ysẽ là (29,).

1
Tuyệt vời này làm việc cho tôi! Cảm ơn Tuomastik! Tôi thực sự đánh giá cao sự hướng dẫn :)
josh_gray

2

Không phải train_test_split mong đợi cả hai XYlà một danh sách có cùng độ dài? X của bạn có chiều dài 6 và Y có chiều dài 29. Có thể thử chuyển đổi nó thành khung dữ liệu gấu trúc (với kích thước 29x6) và thử lại không?

Đưa ra dữ liệu của bạn, có vẻ như bạn có 6 tính năng. Trong trường hợp đó, hãy thử chuyển đổi của bạn Xđể có 29 hàng và 6 cột. Sau đó chuyển dataframe đó sang train_test_split. Bạn có thể chuyển đổi danh sách của mình sang dataframe bằng cách sử dụng pd.DataFrame.from_records.


Cảm ơn sự giúp đỡ của Sal! Bạn nói đúng, tôi chỉ phải chuyển đổi nó thành cùng độ dài. X.shape của tôi là (1, 6, 29) và Y.shape là (29,). Tôi chỉ phải định hình lại chúng và tất cả đều hoạt động tốt với tôi :)
josh_gray
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.