ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 훈련/테스트 데이터 분리
    내일배움캠프 2024. 8. 16. 21:30

     

    데이터셋을 불러온 후 데이터 전처리를 하기 전에

    먼저 데이터 분리를 해줍니다.

     

    그리고 훈련 데이터를 통해서 모델을 학습시키고,

    테스트 데이터를 통해 학습된 모델을 평가합니다.

     

    이렇게 데이터를 분리해주는 이유는

    과적합 방지를 하기 위함입니다.

     

    과적합이란 모델이 훈련 데이터를 너무 잘 학습을 하여

    훈련 데이터 외에 다른 데이터를 가지고 평가를 했을 때

    낮은 점수를 받는 것을 말합니다.

     

    훈련 데이터를 가지고 평가 했을 때 많이 높은 점수를 받는데

    테스트 데이터는 낮은 점수가 나온다면 과적합을 의심해볼 수 있습니다.

     

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(titaninc_df[['Fare','Sex']], titaninc_df[['Survived']], test_size = 0.3, shuffle= True, random_state= 42,stratify=titaninc_df[['Survived']])

     

    위 코드를 통해서 훈련 데이터와 테스트 데이터를 나눠줄 수 있습니다.

     

    파라미터를 간단하게 짚고 넘어가자면

     

    test_size는 테스트 데이터의 비율을 정해줍니다.

    보통은 훈련 데이터:테스트 데이터 = 7:3으로 설정을 해줍니다.

     

    Shuffle은 데이터를 분리해주기 전에 섞는 역할을 합니다.

    Shuffle을 적용하지 않으면 순서대로 데이터를 분리하게 되는데

    훈련 데이터와 테스트 데이터가 균등하게 분리되지 않아

    평가 점수가 낮아질 수 있습니다.

     

    다만 시계열 데이터와 같이 순서가 중요한 데이터에서는

    Shuffle을 사용하지 않는 게 좋습니다.

     

    Stratify는 클래스의 비율을 동일하게 나누는 역할을 합니다.

     

    예를 들어 클래스에 'A', 'B'가 있는데

    클래스 'A'가 매우 적게 존재한다고 가정해봅시다.

     

    만약 클래스 'A' 데이터가 테스트 데이터에 몰리게 되면

    훈련 데이터에는 클래스 'A'가 거의 없게 되고

    따라서 모델이 제대로 훈련을 할 수 없게 됩니다.

     

    요약하자면

    클래스에 불균형이 있을 때

    그리고 범주형 데이터의 분류 문제에서

    사용됩니다.

     

     

Designed by Tistory.