강의

멘토링

로드맵

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

범석님의 프로필 이미지
범석

작성한 질문수

(권철민 성생님)파이썬 머신러닝 완벽 가이드 질문

작성

·

342

0

권철민 선생님의 파머완가 책 읽고 독학중입니다

아래와 같이 5장에 다항회귀에서 overfitting 의 문제점을 설명하는 코드가있는데 도저히 이해가 안가는 부분이 있습니다.

  1. cross_val_score 를 사용하면 pipeline (다항회귀) 모델을 교차검증방식으로 cv '지정 횟수만큼 '학습'-'예측' 진행하는데, 아래 코드를 보면 cross_val_score 교차검증 실행 바로 이전에 전체 데이터로 fit 학습하는 이유가 있나요? fit하고 cross_val 하면 학습을 두번하는 것 아닌지요?

  2. 출력된 차트를 보면 'degree=15 일때 오차가 가장 적어보입니다. 오차는 model 실선과 samples 점 사이의 차이 아닌가요?? degree=15 일때의 mse 값이 어떻게 크게나오는지 모르겠습니다. 어차피 그래프의 30개 샘플 점들의 교차검증으로 error 를 계산한거라면 mse가 가장 작은 값이 나와야하는것 아닌가요?

 

 

 

Screenshot_20230427_162710_Samsung Internet.jpgScreenshot_20230427_162721_Samsung Internet.jpg

답변 1

0

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

전체 데이터로 fit 학습하는 이유는 pipeline에서 PolynomialFeatures와 LinearRegression이 섞여 있는 경우 다항 회귀를 적용하기 전 전처리를 하기 때문입니다. 그렇기 때문에 cross_val_score로 train set, test set 분리를 한 다음에 모델을 학습하면, 전처리가 제대로 이루어지지 않아 잘못된 결과를 가져올 수 있습니다.

출력된 차트에서 degree=15일 때 오차가 가장 작은 값이 나오는 것은 train set에서의 성능을 측정한 것입니다. 이번 예제에서는 degree가 15일 때 train set에서의 성능이 가장 좋았지만, test set에서는 overfitting 문제가 발생할 가능성이 높습니다. 따라서 이처럼 데이터에 대한 과적합(overfitting)을 방지하기 위해서는 모델 성능을 측정할 때 test set을 따로 떼어내어 사용하고, degree와 같은 하이퍼파라미터를 조정할 때는 test set에 대해서는 사용하지 않는 것이 좋습니다.

마지막으로 다항회귀 모델의 mse는 교차검증을 통해 계산하면, 전체 데이터에 대한 error 가 아니라, 교차검증에서 분리된 test set에 대한 error를 계산한 값입니다. 따라서 degree=15에서의 mse가 가장 작더라도, test set에서는 성능이 좋지 않을 수 있습니다.

다른 궁금하신 점이 있으시면 언제든지 문의해주세요. 감사합니다.

범석님의 프로필 이미지
범석

작성한 질문수

질문하기