🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

T2-4 집값예측 문제에서

23.11.24 16:28 작성 조회수 110

0

캐글에 나와있는데로 똑같이 따라하다가

 

from sklearn.ensemble import RandomForestRegressor

rf = RandomForestRegressor()

rf.fit(X_tr, y_tr)

pred = rf.predict(X_val)

print('R2:' + str(r2_score(y_val, pred)))

print('RMSE:' + str(rmse(y_val, pred)))

 

일단 이 부분에서 r2_score와 rmse앞에 각각 str을 왜 붙였는지 모르겠어요,, 강의할 땐 str이 안붙어있었는데

 

그리고,

 

X_test로 최종 예측하고 -> pred = rf.predict(X_test)

 

데이터프레임 만들 때

submit = pd.DataFrame(data={'Id': y_test.Id, 'SalePrice': pred})

이렇게 만들었는데

submit = pd.DataFrame({'Id': y_train('Id'), 'SalePrice': pred})

이렇게 하면 에러가 뜨던데 원래 이렇게 하는게 아닌가요?

 

왜 소괄호 옆에 data= 을 붙였는지 이해가 안가고

 

y_train('id')를 pop하는 과정을 X_train에서 할 필요가 없으니 그냥 그대로 y_train('Id')를 넣어야 하는거 아닌가요?

왜 정답에서는 y_test.Id를 썼는지 궁금합니다 왜 train이 아니라 test인지, 그리고 test 옆에 쩜Id 처럼 왜 쩜을 썼는지 모르겠습니다,,,

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.11.24

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

chandnd37님 질문에 대해 답변 드리겠습니다.

  1. str()을 사용하는 이유는 r2_scorermse 함수의 결과값인 숫자를 문자열로 변환해서 print() 함수 안에서 문자열 덧셈 연산을 통해 출력하기 위함입니다. 파이썬에서는 문자열과 숫자의 덧셈 연산이 불가능하므로, 변환을 해 주어야 합니다.

  2. pd.DataFrame() 함수를 사용하여 데이터프레임을 생성할 때 data=라는 키워드 인자를 사용하는 것은, 해당 데이터가 데이터프레임에 들어갈 값이라는 것을 명시하기 위함입니다. 여기서 data=를 생략해도 됩니다. 중괄호 {}를 통해 직접 만든 딕셔너리를 바로 넣어도 데이터프레임을 생성할 수 있습니다.

  3. y_[test.Id] 와 같이 작성했을 때의 문제는 정확한 상황을 파악하기 어렵지만, y_ 뒤에 변수 이름을 대괄호 [] 나 점 . 으로 연결한 부분은 잘못된 문법입니다. Id 값이 y_train 데이터프레임에 있다면 y_train['Id']와 같이 대괄호를 사용해 열(column)을 참조해야 합니다. test.Id라고 작성하는 것은 test 데이터프레임의 Id 컬럼을 참조하는 문법입니다.

  4. y_train['Id'] 대신 y_[test.Id]를 사용한 이유는, 예측을 진행하는 데이터셋이 X_test인데, 이에 대응하는 Id 값을 넣어주기 위함입니다. 훈련 데이터셋의 Id 값을 넣어주기에는 X_test에 해당하는 Id 값과 일치하지 않을 수 있기 때문에 X_test와 일치하는 Id를 사용해야 정확한 제출 파일을 만들 수 있습니다.

  5. ‘쩜(.)‘을 사용하는 이유는 파이썬에서 객체의 속성이나 메서드에 접근할 때 사용하는 문법입니다. 여기서는 데이터프레임 객체의 특정 컬럼을 가리키기 위해 사용됩니다.

마지막으로, submit = pd.DataFrame({'Id': y_ [train('Id')], 'SalePrice': pred}) 에서 에러가 발생하는 이유는 train('Id') 대신 train['Id']와 같이 대괄호로 컬럼을 참조해야 합니다. 또한 train 대신 test 데이터프레임의 Id를 사용해야 하며, y_ 라는 객체는 존재하지 않는 것으로 보입니다.

코드의 올바른 사용을 위해서는 해당 강의를 다시 확인하시거나, 강의의 지식공유자에게 직접 문의하실 수 있습니다. 오류를 해결하는데 충분한 정보를 제공받지 못했다면 인프런의 ‘문의하기’ 기능을 통해 더 자세한 도움을 요청해 보시길 추천드립니다.

chandnd37님의 프로필

chandnd37

2023.11.24

제가 알기로 y_test는 최종 제출 답안과 비교할 때만 주어지고 수험자는 불러올 수 없는 test 데이터인데 왜 데이터프레임 첫번째 열인 Id에 y_test를 불러오는지 모르겠습니다...

 

y_train['Id'] 처럼 train에 있는 Id를 써야 하는게 맞는 거 아닌가요??

 

채널톡 아이콘