티스토리 뷰

머신러닝

교차검증

삼전동해커 2022. 9. 23. 14:33

머신러닝 학습을 할 때 내가 준비한 데이터로 train set과 test set을 나눠 학습을 하면 고정된 set에만 올바르게 동작하는 과적합이 발생한다.

과적합이 발생했을 때 해결 방법은 간단하게 데이터를 늘려 학습량을 늘리는 방법이 있다.

하지만 무턱대고 학습량을 늘리면 시간이 너무 오래걸릴 수 있다.

이에 대한 해결책을 아래에서 설명했다.

https://watchout31337.tistory.com/403

 

과적합을 막는 방법

1. 데이터의 양 늘리기 데이터의 양이 적을 경우, 해당 데이터의 특정 패턴이나 노이즈까지 쉽게 학습하는 과적합 현상이 발생한다. 따라서 데이터의 양을 늘려 모델이 데이터의 일반적인 패턴

watchout31337.tistory.com

이런 방법들 말고도 앙상블(Ensemble)과 연관된 교차 검증의 k-fold cross validation 방법이 있다.

 

교차 검증은 간단하게 말해 과적합 문제가 있는 지를 알아내는 등 모델을 평가하는데 사용하는 방법이다.

모든 데이터 셋을 train과 test에 사용할 수 있다.

 

가장 일반적으로 사용하는 k-fold 교차 검증 방법은 회귀 모델에서 사용되며, 데이터가 독립적이고 동일한 분포를 가진 경우가 많다.

 

k-fold 방식은

1. 데이터 셋을 k개로 나눈 후 

2. 첫번째 데이터를 검증용 셋으로 사용, 나머지는 train 용으로 사용

3. 모델을 training한 후 첫번째 검증용 셋으로 성능을 평가.

4. 두번째 데이터를 검증용 셋으로 사용, 나머지는 train 용으로 사용

5. 모델을 training한 후 두번째 검증용 셋으로 성능을 평가.

...

이러한 방식으로 k개의 성능 결과가 나오고, k개의 평균을 모델의 성능으로 가져간다.

from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
import numpy as np

iris = load_iris()
logreg = LogisticRegression()  #로지스틱 회귀를 모델로 함.

scores = cross_val_score(logreg, iris.data, iris.target,cv=3)  #교차검증 실행,(모델, trainingdata feature, trainingdata target, fold수)
print('교차 검증별 정확도 : ',np.round(scores,4))
print('평균 검증 정확도', np.round(np.mean(scores),4))

#cross_val_score와 비슷하지만 dict 타입으로 출력,pd.DataFrame을 이용해 형변환을 해줘야 함
result = cross_validate(logreg,iris.data, iris.target, cv=3,return_train_score=True) 
print('각 검증의 결과 : \n',pd.DataFrame(result))

'머신러닝' 카테고리의 다른 글

머신러닝 파라미터와 하이퍼 파라미터  (0) 2022.10.03
머신러닝 원핫 인코딩  (1) 2022.09.30
머신러닝 get_dummies()  (0) 2022.09.24
머신러닝 / SVM(Support Vector Machine)  (1) 2022.09.22
회귀와 분류 차이  (0) 2022.08.25
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함