Note

교차 검증 본문

Machine Learning

교차 검증

알 수 없는 사용자 2021. 5. 7. 11:46
728x90

1. K 폴드

필요한 라이브러리를 임포트하고 iris 데이터를 불러온 후에 데이터 형태를 확인한다. 데이터를 불러오고 확인하는 습관을 들이는 것이 좋다.

디시전트리 모델을 정의하고 객체를 생성한다.

cv = cross validation이다.

KFold를 사용하고 괄호 안에 있는 n_splits = 5 는 5개의 폴드 세트로 분리한다. 그다음 정확도를 담을 리스트 객체를 생성한다.

for문이 도는 동안 KFold 객체의 split( )을 호출하면 폴드 별 학습용, 검증용 테스트의 row 인덱스를 array로 반환한다.

2. Staratified K 폴드

K-FOLD 교차검증의 문제점은 불균형한 데이터에는 적용이 안된다. 이를 해결할 방법으로 나온 것이 StaratifiedKFold 이다. 불균형한 분포도를 가진 레이블 데이터 집합을 균형하게 섞어주고 교차 검증을 한다.

데이터를 로드하고 그에 해당하는 타깃 값을 확인한다.

그냥 KFold를 사용하면 출력 결과물처럼 학습 데이터에 골고루 분포되어 있지 않고 불균형하게 나눠져 있는 것을 확인할 수 있다. 이처럼 불균형하게 학습하면 검증이 제대로 되지 않는다.

skf로 객체를 지정해주고 학습용 데이터와 테스트 데이터를 나눠주는 과정은 동일하지만 차이점이 있다면 레이블 값을 넣어줘서 레이블에 맞춰 균일하게 분포를 맞춰준다.

위 코드를 실행한 출력물인데 일반 KFold와는 달리 균등하게 데이터가 분포되어 있는 것을 알 수 있다.

일반 KFold처럼 교차 검증 정확도를 활용하기 위한 코드이다.

일반 KFold 정확도는 0.9인데 이 교차검증은 0.96으로 이전보다 정확도가 좋아진 것을 알 수 있다.

3. cross_val_score() : 교차검증을 보다 간편하게 하는 방법

이전보다 확실히 코드의 길이가 짧아진 것을 한눈에 알 수 있다. 함수 정의와 복잡한 for문 없이도 가능하다.

4. GridSearchCV : 교차 검증 + 하이퍼 파라미터 튜닝

하이퍼 파라미터는 모델의 성능을 최대로 끌어올리는 학습 조건이다. 학습 조건을 잘 설정해야 최대의 성능을 내는 머신러닝 모델을 얻을 수 있기 때문에 하이퍼 파라미터 튜닝이 중요하다.

기존처럼 필요한 라이브러리를 로딩하고 데이터를 불러온다. 그다음 모델 정의와 하이퍼 파라미터들을 딕셔너리 형태로 설정해준다. 

하이퍼 파라미터들을 3개의 fold 세트로 나누어서 수행하기로 설정했다. Train 데이터로 하이퍼 파라미터들을 순차적으로 학습하고 평가한다. 그 결과 값이 cv_results_라는 딕셔너리로 저장되고 판다스를 이용해서 데이터 프레임으로 변환해서 확인한다.

데이터 프레임으로 확인해보면 순위와 해당 스코어들을 알 수 있다.

(참고 자료) GridSearchCV 전체 결과를 보고 필요한 자료만을 가져올 수 있다.

최적 파라미터, 최고 정확도, 세트 예측 정확도 등을 알 수 있다. 이처럼 모델의 핵심은 파라미터 튜닝이다.

estimator 종류는 크게 분류와 회귀로 나뉜다.

분류 : DecisionTreeClassifier, RandomForestClassifier, ...
회귀 : LinearRegression, ...

결론은 GridSearchCV를 사용했더니 교차검증을 통해 최적의 모델 성능을 내는 하이퍼 파라미터 튜닝을 했고, 정확도 높은 모델을 얻었다.

'Machine Learning' 카테고리의 다른 글

모델 과적합을 막는 방법  (2) 2021.09.08
데이터 전처리  (0) 2021.05.10
학습 / 테스트 데이터  (0) 2021.05.06
Numpy (넘파이)  (0) 2021.05.06
파이썬과 머신 러닝  (0) 2021.05.05
Comments