강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

데뿌님의 프로필 이미지
데뿌

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

9회 기출유형(작업형2)

test predict이 먹히지 않습니다.

해결된 질문

작성

·

41

0

# 최종 제출 파일 (lightGBM)
pred = lg.predict(test)
submit=pd.DataFrame({'pred':pred})
submit.to_csv("result.csv",index=False)

아래처럼 feature가 맞지 않아서 에러가뜹니다. 강의 그대로 했는데 왜그러는 걸까요??
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/tmp/ipython-input-50-2529582812.py in <cell line: 0>()
      1 # 최종 제출 파일 (lightGBM)
----> 2 pred = lg.predict(test)
      3 submit=pd.DataFrame({'pred':pred})
      4 submit.to_csv("result.csv",index=False)

2 frames
/usr/local/lib/python3.11/dist-packages/lightgbm/sklearn.py in predict(self, X, raw_score, start_iteration, num_iteration, pred_leaf, pred_contrib, validate_features, **kwargs)
   1008         n_features = X.shape[1]
   1009         if self._n_features != n_features:
-> 1010             raise ValueError(
   1011                 "Number of features of the model must "
   1012                 f"match the input. Model n_features_ is {self._n_features} and "

ValueError: Number of features of the model must match the input. Model n_features_ is 28 and input n_features is 8

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

pred = lg.predict(test)

컬럼 수가 맞지 않아요! 혹시 train만 원핫인코딩하고 test는 하지 않았나요?

데뿌님의 프로필 이미지
데뿌
질문자

오타가 있었습니다!!
다시 보니 test를 teat로 써서 먹히지 않았습니다!

0

안녕하세요, 인프런 AI 인턴입니다.

데뿌님께서 질문하신 내용은 주로 훈련 데이터와 테스트 데이터 간의 특성(컬럼) 불일치로 인해 발생하는 오류입니다. 이 오류 메시지는 LightGBM 모델이 예측할 때 사용된 특성 수와 실제 입력된 데이터의 특성 수가 다르다는 것을 의미합니다.

문제의 원인

모델이 훈련된 데이터셋의 특성 수(예: 28개)와 테스트 데이터셋의 특성 수(예: 8개)가 일치하지 않기 때문에 발생합니다. 주로 데이터 전처리 과정에서 범주형 데이터의 인코딩 또는 특정 특성이 누락되어 발생하는 경우가 많습니다.

해결 방법

  1. 특성 수 일치시키기:

    • 훈련 데이터와 테스트 데이터 모두 동일한 방법으로 전처리해야 합니다. 즉, 원-핫 인코딩 또는 다른 방식으로 범주형 데이터를 변환할 때 두 데이터셋 모두 동일한 특성을 가져야 합니다.
  2. Train과 Test 데이터 합쳐서 처리하기:

    • 하나의 데이터프레임으로 결합한 뒤 인코딩을 진행하고, 다시 분리하는 방법을 고려해 보세요.
combined = pd.concat([train, test], axis=0)
combined = pd.get_dummies(combined)

train = combined[:len(train)]
test = combined[len(train):]
  1. 불일치 특성 확인 및 수정:
    • get_dummies 후 생성된 데이터프레임의 컬럼을 확인하여 불일치하는 부분을 수정합니다.
    • traintest의 컬럼이 달라지는 경우, 누락된 특성 부분에 0 값을 할당하여 일치시킵니다.

추가 설명 및 유사한 문제 해결 링크:

유사한 문제에 대한 답변은 아래 링크에서 확인하실 수 있습니다:

해당 링크에서는 유사한 특성 불일치 문제에 대한 다양한 해결책을 소개하고 있으니 참고해 보시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

데뿌님의 프로필 이미지
데뿌

작성한 질문수

질문하기