3

아주 SciKit 및 일반 파이썬으로 학습 선형 대수/기계 새로운, 그래서 나는 다음과 같은 해결하기 위해 수없는 것 : 방법 : SciKit 선형 회귀에 'ValueError를가 정렬되지 셰이프가'

내가 훈련 세트가 연속 및 이산/범주 형 값을 모두 포함하는 테스트 데이터 세트를 제공합니다. CSV 파일은 Pandas DataFrames에로드되고 모양이 일치하며 (1460,81) 및 (1459,81)입니다. 그러나 Pandas' get_dummies을 사용한 후에는 DataFrames의 모양이 (1460, 306) 및 (1459, 294)로 변경됩니다. 따라서, SciKit Linear Regression 모듈을 사용하여 선형 회귀 분석을 수행하면 306 개의 변수에 대한 모델이 작성되고 294 개의 변수로 모델을 예측하려고 시도합니다. 그러면 당연히 다음과 같은 오류가 발생합니다.

ValueError: shapes (1459,294) and (306,1) not aligned: 294 (dim 1) != 306 (dim 0) 

어떻게 이러한 문제를 해결할 수 있습니까? 나는 어쨌든 (1459, 294) 다른 하나와 일치하도록 모양을 바꿀 수 있을까요?

덕분에 나는 나 자신을 분명히했습니다 :) 범주 데이터를 처리 할 때

답변

4

이것은 매우 일반적인 문제입니다 바랍니다. 이것을 가장 잘 다루는 방법에 대한 의견이 다릅니다.

한 가지 가능한 방법은 가능한 옵션 집합을 제한하는 범주 형 기능에 기능을 적용하는 것입니다. 예를 들어, 지형지 물에 알파벳 문자가 포함 된 경우 A, B, C, D 및 '기타/알 수 없음'에 대한 지형지 ​​물을 인코딩 할 수 있습니다. 이 방법으로 테스트 시간과 요약에서 동일한 기능을 적용 할 수 있습니다. 명백한 단점은 물론, 특징 공간을 줄임으로써 의미있는 정보를 잃을 수도 있다는 것입니다.

또 다른 방법은 교육 데이터에 모델을 작성하고 자연스럽게 생성 된 더미를 모델에 적용하여 모델의 기준으로 삼는 것입니다. 테스트시 모델을 예측할 때 교육 데이터가 변형되는 것과 같은 방식으로 테스트 데이터를 변환합니다. 예를 들어, 학습 세트에 피처에 알파벳 문자가 있고 테스트 세트의 동일한 피쳐에 'AA'값이 포함 된 경우 예측을 무시하면됩니다. 이것은 현재 상황의 반대이지만 전제는 같습니다. 누락 된 기능을 즉시 작성해야합니다. 물론 이러한 접근 방식에도 단점이 있습니다.

두 번째 방법은 질문에서 언급 한 내용이므로 pandas으로 처리하겠습니다.

get_dummies을 사용하면 범주 형 기능을 여러 개의 핫 코드 된 기능으로 인코딩 할 수 있습니다. 당신이 할 수있는 것은 다음과 같이 reindex를 사용하여 훈련 데이터와 일치하는 테스트 데이터를 강제로 수 있습니다 : 더미 기능을 0에서 작성,

test_encoded = pd.get_dummies(test_data, columns=['your columns']) 
test_encoded_for_model = test_encoded.reindex(columns = training_encoded.columns, 
    fill_value=0) 

이 훈련 데이터와 동일한 방법으로 테스트 데이터를 인코딩하는 것 테스트 데이터를 인코딩하여 생성되지는 않았지만 교육 과정에서 생성되었습니다.

그냥 함수에 넣고 테스트 데이터에 적용 할 수 있습니다. 배열 또는 열 이름 목록을 만들면 인코딩 된 학습 데이터가 메모리 (training_encoded.columns으로 액세스)에 필요하지 않습니다.

1

관심있는 사람 : 기차와 테스트 세트를 병합 한 다음 인형을 생성 한 다음 데이터를 똑같은 비율로 다시 분할합니다. 그런 식으로 정확히 동일한 더미 데이터를 생성했기 때문에 다른 모양에 더 이상 문제가 없었습니다.

0

이 나를 위해 작동합니다
를 처음에 나는이 오류 메시지가 표시되었습니다
나는 내 기차 데이터에 3 변수를 사용하여 모델을 생성 된 것을 발견

shapes (15754,3) and (4,) not aligned 

. 하지만 상수 변수를 덧붙이면 X_train = sm.add_constant(X_train) 상수 변수가 자동으로 생성됩니다. 그래서, 총계에는 지금 개의 변수가 있습니다.
그리고이 모델을 테스트 할 때 테스트 변수의 값은 입니다. 따라서 오류가 치수 상실 일치에 대해 팝업됩니다.
그래서 y_test에 더미 변수를 만드는 트릭을 사용했습니다.

`X_test = sm.add_constant(X_test)` 

이 변수는 쓸모 없지만 모든 문제를 해결합니다.

관련 문제