playdata
ML(0809_day4) - 교차 검증 예제
_JAEJAE_
2021. 8. 9. 17:46
교차 검증¶
- K 폴드 : 데이터를 K개로 분할하여 학습과 검증 수행
In [1]:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import KFold
from sklearn.model_selection import StratifiedKFold
import numpy as np
import pandas as pd
In [2]:
iris = load_iris()
features = iris.data
label = iris.target
dt_clf = DecisionTreeClassifier(random_state=42)
kfold = KFold(n_splits=5)
cv_accuracy = []
print('붓꽃 데이터 세트 크기:',features.shape[0])
붓꽃 데이터 세트 크기: 150
In [4]:
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_test)
# 반복 시 마다 정확도 측정
accuracy = np.round(accuracy_score(y_test,pred), 4)
cv_accuracy.append(accuracy)
# 개별 iteration별 정확도를 합하여 평균 정확도 계산
print('교차 검증별 정확도:', np.round(cv_accuracy, 4))
print('평균 검증 정확도:', np.mean(cv_accuracy))
교차 검증별 정확도: [1. 1. 0.8333 0.9333 0.8 ] 평균 검증 정확도: 0.91332
- Stratified K 폴드 : 데이터의 비율을 고려해서 K개로 나누고 학습과 검증 수행
In [15]:
dt_clf = DecisionTreeClassifier(random_state=42)
skfold = StratifiedKFold(n_splits=5)
cv_accuracy=[]
for train_index, test_index in skfold.split(features, label):
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_test)
# 반복 시 마다 정확도 측정
accuracy = np.round(accuracy_score(y_test,pred), 4)
train_size = X_train.shape[0]
test_size = X_test.shape[0]
cv_accuracy.append(accuracy)
# 교차 검증별 정확도 및 평균 정확도 계산
print('교차 검증별 정확도:', np.round(cv_accuracy, 4))
print('평균 검증 정확도:', np.mean(cv_accuracy))
교차 검증별 정확도: [0.9667 0.9667 0.9 0.9333 1. ] 평균 검증 정확도: 0.9533400000000001
- cross_val_score( ) : 내부적으로 Stratified K 폴드 사용
In [14]:
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score , cross_validate
from sklearn.datasets import load_iris
iris = load_iris()
dt_clf = DecisionTreeClassifier(random_state=42)
data = iris.data
label = iris.target
# 성능 지표는 정확도(accuracy) , 교차 검증 세트는 5개
scores = cross_val_score(dt_clf , data , label , scoring='accuracy',cv=5)
print('교차 검증별 정확도:',np.round(scores, 4))
print('평균 검증 정확도:', np.mean(scores))
교차 검증별 정확도: [0.9667 0.9667 0.9 0.9333 1. ] 평균 검증 정확도: 0.9533333333333334
In [ ]: