인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김현영님의 프로필 이미지
김현영

작성한 질문수

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

모델링 및 평가(회귀)

검증 데이터 분리 시 질문입니다.

작성

·

48

0

from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train.drop('charges',axis=1),
                                            train['charges'],
                                            test_size=0.15,
                                            random_state = 2022)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!

먼저 선생님의 코드는 위와 같았습니다.

 

아래는 제가 수정해서 작성한 코드입니다.

from sklearn.model_selection import train_test_split
X_train = train.drop('charges', axis = 1)
y_train = train['charges']        
X_tr, X_val, y_tr, y_var = train_test_split(X_train, y_train, test_size = 0.15, random_state= 2002)
-------> 보기 편하려고 이렇게 넣었더니 y_var을 찾을 수 없다는 에러가 나왔음

헷갈리지 않기 위해 이와 같이 변수로 처리한 뒤 train_test_split을 했더니

X_train.head를 찍어도 선생님과 다른 결과가 나오고

평가 수식을 적은 후

linear regression을 하니 y_val이 정의되지 않았다고 에러가 나옵니다. 이유가 무엇인지 한참 고민해도 알아내지 못해서 질문 남깁니다.

 

답변해 주시면 감사하겠습니다.

답변 2

0

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

y_var / y_val이 정의되지 않았다는 메세지가 나왔다는건 변수 명 오류일 가능성이 큽니다.

X_tr, X_val, y_tr, y_val = train_test_split <- 강의 코드

X_tr, X_val, y_tr, y_var = train_test_split <- 직접 입력한 코드

 

 

김현영님의 프로필 이미지
김현영
질문자

와아!! 100번을 다시 봐도 안 보이던 오타를..... 정말 감사합니다!

0

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

김현영님께서 질문해 주신 문제는 train_test_split을 이용하여 데이터를 나누는 과정에서 발생한 에러와 관련이 있습니다. 작성하신 코드를 기반으로 문제를 분석해 보겠습니다.

에러 분석

  1. 변수명 오류: train_test_split 결과의 네 번째 반환값을 y_var으로 잘못 지정했습니다. 원래는 y_val이어야 합니다. 이 부분에서 변수가 정의되지 않았다는 에러가 발생한 것입니다.

    X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size=0.15, random_state=2002)
    
  2. 변수 이름 일관성 문제: y_var를 사용하면서 변수 일관성 문제가 있어 코드에서 혼란이 발생한 것으로 보입니다. 사용하시는 변수명(y_val)을 일관성 있게 유지하는 것이 좋습니다.

해결책

변수명을 수정하고 코드를 다시 실행하세요:

from sklearn.model_selection import train_test_split
X_train = train.drop('charges', axis=1)
y_train = train['charges']
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size=0.15, random_state=2002)

이렇게 수정하면 변수가 y_var가 아닌 y_val로 일관되게 사용되어, y_val이 정의되지 않았다고 나오는 에러를 해결할 수 있습니다.

이 과정에서 발생하는 데이터의 차이점은 random_state의 값이 2022와 2002로 다르기 때문일 수 있습니다. random_state는 데이터가 섞이는 순서를 결정하므로, 다를 경우 결과물 자체가 다르게 나올 수 있습니다.

이와 같은 문제는 train_test_split 관련 문제에서 강샛별님의 질문에서도 비슷한 문제가 있었으며, 모델의 피처와 타겟을 정확히 구분해야 한다는 설명을 참고할 수 있습니다. 여기서도 비슷한 시험 사례로 질문이 있었습니다.

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

김현영님의 프로필 이미지
김현영

작성한 질문수

질문하기