1. 서론
오늘은 머신러닝의 검증방법중 하나인 교차검증 을 알아보려 합니다.
직전의 포스팅인 와인 데이터셋을 이용해 진행합니다.
데이터 수집, 정제, 전처리 과정, 모델 학습은 동일하니 모델 학습 이후로 포스팅 하겠습니다.
https://silvermoons.tistory.com/39
교차검증은 데이터를 여러번 반복해서 나눈 후
여러 모델을 학습해 성능을 평가하는 방법입니다.
위의 그림처럼 여러 종류의 train, test 데이터셋을 만들어 여러번 학습한 후
그 결과들의 평균을 구하는 방법입니다.
2. 모델 평가
학습 데이터 평가 : 99.7%
테스트 데이터 평가 : 86.4%
저번 포스팅과 동일하게 과적합이 되었네요.
3. 교차 검증
이번엔 model.score() 대신 cross_validate() 를 이용해 평가해 보겠습니다.
앞에서 train_test_split() 을 이용해 데이터를 섞어 주어서 따로 random_state() 값을 줄 필요는 없습니다.
test_score가 총 5개가 나왔습니다.
numpy의 mean 을 이용해 평균을 구했더니
85.5% 의 정답율이 나왔습니다.
교차검증시 데이터를 섞어주기 위해 spliter를 사용하겠습니다.
KFold를 이용해 교차검증을 하고 평균값을 구했더니
85.7% 의 정답률을 보여주네요.
4. Grid_search
이번엔 교차검증에 매개변수를 변경해가며 검증을 하려 합니다.
Grid_search 는 params에 사용할 각각의 매개변수들을 튜플 형태로 지정한 후 사용하시면 됩니다.
저는 0.0001 부터 0.0005 까지 5개의 매개변수를 넣어 주었습니다.
Grid_search 를 사용하면
각각의 매개변수 중 가장 높았던 값을 보여줍니다
96.1%의 높은 정답률을 보여주고 있네요.
또 그에 사용된 매개변수를 알고싶다면 best_params_를 이용하시면 됩니다.
0.0001 이 가장 높게 측정되었네요.
5. 중간정리
1. 탐색할 매개변수를 지정
2. 훈련세트에서 Grid_search 수행
3. 최고점을 나타내는 변수들로 세팅(Grid_search는 모두 학습 후 가장 높았던 정답률의 매개변수로 재학습 후 마무리 됨)
4. train_test_split 사용했던 모든 데이터를 훈련에 사용 가능해짐.
6. 불순도 감소 최소량 지정
이번엔 노드 분할을 위해 불순도 감소 최소량을 지정한 후 학습을 시키겠습니다.
86.8% 의 정답률을 보여줍니다.
7. 마무리
오늘은 학습시킨 모델의 검증방법중 하나인 교차검증을 알아봤습니다.
데이터를 학습용과 테스트용으로 여러번 나눈 후 각각의 점수로 평균 성능을 계산하면
한번 나누어서 한 성능보다 일반화 된 성능을 얻을 수 있기 때문입니다.
동시에
최적의 하이퍼파라미터와 모델의 최적화 조건을 찾아내는데에 활용할 수 있습니다.
하지만 그만큼 학습하고 평가하는데에 몇배의 연산 비용이 들어가는 단점도 있답니다.
결국 모델의 정확한 성능을 알아야 하고, 동시에 최적화를 해야하는 저희의 입장에서는
안쓰기에 아쉬운 방법인듯 합니다.
어쨌거나 저쨌거나
여튼 저튼 쨌든
끝
'은달의 IT 리마인드 > 머신러닝 딥러닝 [ ML, DL ]' 카테고리의 다른 글
[ 딥러닝 ] : RandomForestClassifier, RandomForestRegressor 하이퍼 파라미터 (0) | 2023.08.23 |
---|---|
[ 딥러닝 ] : 실시간 객체 탐지 ( YOLO ) (0) | 2023.05.24 |
[ 머신러닝 ] : 로지스틱 회귀 & 결정 트리 (0) | 2023.05.22 |
[ Deep Learning ] : 딥러닝 기초 (0) | 2023.05.13 |