오답노트

[ML] k-fold Cross Validation 본문

Python/ML

[ML] k-fold Cross Validation

권멋져 2022. 8. 25. 19:10

k-fold Cross Validation

모델링을 할 때, 데이터 셋을 train과 test로 나누고, train 데이터는 다시 train 과 validation 데이터로 나눠서 모델링한다.

 

k-fold Cross Validation은 train을 k개로 나누고 차례대로 validation으로 선택하고 성능을 평가한다.

이렇게 k 개의  Accuracy 평균을 측정한다.

 

Cross Validation은 Accuracy의 편차를 많이 줄여준다. Accuracy 편차가 줄어든다는 의미는 모델의 성능의 신뢰도가 올라간다는 의미다. 

 

k  값은 보통 5 ~ 10 사이에서 많이 사용된다.

from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

model = DecisionTreeClassifier(max_depth = 3)

dt_result = cross_val_score(model, x, y, cv=10)
print(dt_result)
print(dt_result.mean(), dt_result.std())

'''
[0.66 0.73 0.64 0.68 0.66 0.72 0.63 0.69 0.61 0.73]
0.675 0.040311288741492736
'''

 

cross_val_scroe의 cv 옵션이 k 값이다.

위 함수는 내부적으로 학습 예측 평가를 한번에 한다. 하지만 fit을 하지는 않으므로 수치를 파악하는 정도로만 사용하자.