교차 검증
- 교차검증은 여러 세트로 구성된 학습 데이터 세트와 검증 데이터 세트에서 학습과 평가를 수행하는 것이다.
- 각 세트에서 수행한 평가 결과에 따라 하이퍼 파라미터 튜닝 등의 모델 최적화를 더욱 손쉽게 할 수 있다.
- 대부분의 ML 모델의 성능 평가는 (1)교차 검증 기반의 1차 평가 후, (2)테스트 데이터 세트에 적용해 평가하는 프로세스이다.
- 교차 검증을 통해 과적합 문제도 개선할 수 있다.
K-폴드 교차 검증
- 가장 보편적으로 사용되는 교차 검증 기법
- K개의 데이터 폴드 세트를 만들어서, K번만큼 각 폴드 세트에 학습과 검증 평가를 반복적으로 수행하는 방법
- 위 예시 이미지에서는 5번의 교차 검증 결과를 평균한 결과로 예측을 수행하게 된다.
📑 예제
1. 5개의 폴드 세트로 iris 데이터 분리
- kfold 객체 생성
- 폴드 세트별 정확도를 담을 리스트 객체 생성
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import KFold
import numpy as np
iris = load_iris()
features = iris.data
label = iris.target
dt_clf = DecisionTreeClassifier(random_state = 11)
# 5개의 폴드 세트로 분리
kfold = KFold(n_splits=5)
cv_accuracy = []
print('붓꽃 데이터 세트 크기: ', features.shape[0])
2. k폴드 객체의 split()을 호출하여 학습용/검증용 데이터의 row index를 array로 반환
- 생성된 kfold 객체의 split() 을 호출해 전체 데이터를 5개 폴드 데이터 세트로 분리
- split()을 호출하면 학습용/검증용 데이터로 분할할 수 있는 인덱스를 반환
- 실제로 학습용/검증용 데이터 추출은 반환된 인덱스를 기반으로 개발 코드에서 직접 수행해야 함!
for train_index, test_index in kfold.split(features):
X_train, X_test = features[train_index], features[test_index]
y_train, y_test = label[train_index], label[test_index]
# 학습 및 예측
dt_clf.fit(X_train, y_train)
pred = dt_clf.predict(X_train)
n_iter += 1
# 반복시마다 정확도 측정
accuracy = np.round(accuracy_score(y_test, pred), 4)
train_size = X_train.shape[0]
test_size = X_test.shape[0]
print('\n#{0} 교차 검증 정확도 :{1}, 학습 데이터 크기: {2}, 검증 데이터 크기: {3}'
.format(n_iter, accuracy, train_size, test_size))
print('#{0} 검증 세트 인덱스:{1}'.format(n_iter,test_index))
cv_accuracy.append(accuracy)
print("\n##평균 검증 정확도", np.mean(cv_accuracy))
📑 결과
728x90
'Machine Learning > scikit-learn' 카테고리의 다른 글
[GridSearchCV] 교차 검증 & 하이퍼 파라미터 튜닝을 한 번에 (0) | 2023.08.17 |
---|---|
[교차 검증] Stratified K 폴드 (0) | 2023.08.17 |
[데이터 전처리] MinMaxScaler를 이용한 데이터 정규화 예제 (0) | 2023.08.17 |
[하이퍼 파라미터] hyper parameter란? (0) | 2023.08.17 |
[회귀] LinearRegression (선형 회귀 모델) & 회귀 평가 지표 (0) | 2023.08.15 |