-
Week#4 교차 검증과 그리드 서치쿠다 4기/<혼공> 머신러닝& 딥러닝 2023. 8. 18. 08:03
테스트 세트로 계속 모델을 평가하면 일반화 성능이 떨어지지 않을까?
테스트 세트를 사용하지 않는 방법으로 검증 세트를 활용하는 방법이 있다. 훈련 세트를 또 나누는 것이다.

훈련 세트에서 모델을 훈련하고 검증 세트로 모델을 평가한다. 이때, 테스트 하고 싶은 매개변수를 바꿔가며 가장 좋은 모델을 고르고 마지막에 이 매개변수로 전체 훈련 데이터에서 모델을 다시 훈련하고 테스트 세트에서 최종 점수를 평가한다.


과대적합 되었다. 매개변수를 바꿔 더 좋은 모델을 찾아야 한다.
교차검증
교차 검증을 이용하면 안정적인 검증 점수를 얻고 훈련에 더 많은 데이터를 이용할 수 있다. 검증 세트를 떼어 내어 평가하는 과정을 여러 번 반복한 뒤 이 점수를 평균하여 최종 검증 점수를 얻는것이다.

3-폴드 교차 검증 
교차 검증은 위와 같은 방법으로 실행한다. fit_time, score_time, test_time의 키를 가진 딕셔너리를 반환하고 ,test_score의 평균을 출력한다. 이름은 test_score이지만 검증 폴드의 점수임을 잊지 말자.

사이킷런에서 분할기를 이용하면 훈련세트를 섞은 후 교차 검증을 수행할 수 있다. 분류 모델은 StratifiedKFold, 회귀 모델은 KFold 분할기를 사용한다.
그리드 서치
앞서 매개변수를 변경하며 최적의 매개변수를 찾는다고 하였다. 그런데 모델마다 매개변수 수가 많고, 그 매개변수들을 동시에 바꿔가며 최적의 값을 찾기엔 너무 복잡하다. 따라서 사이킷런에서 제공하는 그리드서치를 이용한다.


그리드 서치를 이용해 최적 매개변수, 최상의 검증점수를 얻을 수 있다. 다시 위 방법을 정리하면 다음과 같다.
- 탐색할 매개변수를 지정한다.
- 훈련 세트에서 그리드 서치를 수행하여 최상의 평균 검증 점수가 나오는 매개변수 조합을 찾는다. 이 조합은 그리드 서치 객체에 저장된다.
- 그리드 서치는 최상의 매개변수에서 전체 훈련 세트를 사용해 최종 모델을 훈련한다. 이 모델도 그리드 서치 객체에 저장된다.
이쯤되면 이런 의문이 들지도 모른다.
매개변수의 범위/간격을 지정할 때 적절한 기준이 있을까?
랜덤 서치
매개변수의 값이 수치일 때 값의 범위나 간격을 미리 정하기 어렵거나 너무 많은 매개변수 조건이 있어 그리드 서치 수행 시간이 오래 걸릴 때 랜덤 서치를 사용하면 좋다. 랜덤 서치는 매개변수를 샘플링할 수 있는 확률 분포 객체를 전달한다.
난수 발생기랑 유사하다.

각 파라미터들을 실수에서 균등하게 샘플링 하는 함수인 uniform() 또는 정수에서 균등하게 샘플링하는 함수 randint()을 이용해 샘플링하였다. 가능한 모든 경우를 검증해야하는 그리드 서치와 달리, 이 경우는 랜덤하게 몇 번만 하기에 교차 검증 수를 줄이며 넓은 영역을 효과적으로 탐색한다.

테스테 세트에 대한 최종 결과이다.
'쿠다 4기 > <혼공> 머신러닝& 딥러닝' 카테고리의 다른 글
Week#5 군집 알고리즘 (0) 2023.08.29 Week #4 트리의 앙상블 (0) 2023.08.18 Week #4 결정 트리 (0) 2023.08.18 Week #3 확률적 경사 하강법 (0) 2023.08.15 #Week 3 로지스틱 회귀 (0) 2023.08.15