train_test_split () 오류 : 샘플 수가 일치하지 않는 입력 변수를 찾았습니다.


21

Python에 익숙하지 않지만 일부 분류 데이터를 기반으로 첫 번째 RF 모델을 작성합니다. 모든 레이블을 int64 숫자 데이터로 변환하고 numpy 배열로 X 및 Y에로드했지만 모델을 훈련하려고 할 때 오류가 발생했습니다.

내 배열은 다음과 같습니다.

>>> 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)

역 추적 (가장 최근 통화) :

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

2039, train_test_split에서 배열 = indexable (* arrays) 색인 가능한 check_consistent_length (* result) 파일 "/ Library / Python /의 파일"/Library/Python/2.7/site-packages/sklearn/utils/validation.py ", 206 행 check_consistent_length "샘플의 2.7 / site-packages / sklearn / utils / validation.py", 181 행 : % r "% [길이 1의 경우 int (l)])

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

앞으로 프로그래밍 질문 을 게시하십시오. stackoverflow에 . 이 Q & A는 프로그래밍이 아니라 데이터 과학에 관한 것입니다.
Ricardo Cruz

답변:


15

XY같은 길이 ( train_test_split필요한 길이) 가 없기 때문에 오류가 발생했습니다 X.shape[0] != Y.shape[0]. 현재 코드가 주어지면 :

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

이 오류를 해결하려면

  1. 다음 명령을 사용하여 추가 차원을 np.array()정의 X하거나 나중에 추가 차원을 제거 할 때 추가 목록을 제거하십시오 X = X.reshape(X.shape[1:]). 이제 모양은 X(6, 29)입니다.
  2. 트랜스 X실행 X = X.transpose()의 샘플 같은 수를 얻을 수 XY. 자, 모양X (29, 6)이고 모양은 Y(29,)입니다.

1
놀랍습니다. 감사합니다 Tuomastik! 안내를 정말 감사합니다 :)
josh_gray

2

기대 train_test_split되지 모두 XY 같은 길이의 목록을 수? X의 길이는 6이고 Y의 길이는 29입니다. 팬더 데이터 프레임 (29x6 차원)으로 변환 한 후 다시 시도 하시겠습니까?

데이터가 주어지면 6 가지 기능이있는 것 같습니다. 이 경우 X29 행 6 열로 변환하십시오 . 그런 다음 해당 데이터 프레임을에 전달하십시오 train_test_split. 을 사용하여 목록을 데이터 프레임으로 변환 할 수 있습니다 pd.DataFrame.from_records.


도움 살 주셔서 감사합니다! 네 말이 맞아, 나는 그것을 같은 길이로 변환해야했다. 내 X.shape는 (1, 6, 29)이고 Y.shape는 (29,)였습니다. 난 그냥 그들을 개조해야하고 그것은 모두 나를 위해 잘 작동 :)
josh_gray
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.