오답노트

[ML] KFold, cross_val_score 본문

머신러닝, 딥러닝

[ML] KFold, cross_val_score

장비 정 2021. 1. 28. 18:45

KFold 는 데이터셋을 K 개로 훈련과 검증 데이터로 나눈다.

 

출처:en.wikipedia.org/wiki/Cross-validation_(statistics)

 

위의 그림에서는 전체 데이터를 8 개로 나누었으며 총 8번의 학습을 한 것을 볼 수 있다.

 

KFold 는 직접적인 성능 향상을 이루진 않지만,

 

단순 train_test_split 으로 훈련용, 검증용 데이터로 나눌 때에 발생하는 데이터의 낭비를 일반화 시켜 방지할 수 있다.

 

또한 cross_val_score 를 통해 해당 훈련용 데이터를 검증할 수 있다.

 

코드로 확인하면,

 

# 0. import libraries

 

import warnings

warnings.filterwarnings('ignore') # 경고문 무시 / 제거

 

from sklearn.model_selection import KFold, cross_val_score

from sklearn.ensemble import RandomForestClassifier

from sklearn.metrics import accuracy_score

 

# 1. data

 

from sklearn.datasets import load_iris # 붓꽃 데이터셋 로드

 

datasets=load_iris()

x=datasets.data

y=datasets.target

 

kf=KFold(n_split=5, shuffle=True, random_state=23) # KFold 변수 선언

 

# 2. model

 

model=RandomForestClassifier() # 랜덤포레스트 분류 모델

 

# 3. fitting, score

 

score=cross_val_score(model, x, y, cv=kf) # 모델 검증

 

# 4. predict

 

y_pred=model.predict(x) # 데이터 예측

print('score : ', score)

print('accuracy : ', accuracy_score(y, y_pred))

 

위와 같은 형식으로 모델 구성 및 훈련, 검증이 가능하다.

 

또한 cross_val_score 는 model.fit, model.score 를 포함하고 있어 모델만 구성 후 바로 로스를 출력 가능하다.