재미있게도 여러 수준의 추상화? 단계를 제공하고 있다.
가장 베이직은 KFold 클래스를 사용하는 것이다.
from sklearn.model_selection import KFold
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
clf = DecisionTreeClassifier(max_depth=2)
accuracies = []
# 데이터 X, y가 존재할 때
kf = KFold(n_split=5) # 5회 접는다
for train_idx, test_idx in kf.split(X):
X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]
y_train, y_test = y.iloc[train_idx], y.iloc[test_idx]
clf.fit(X_train)
y_pred = clf.predict(X_test)
score = accuracy_score(y_test, y_pred)
accuracies.append(score)
print(accuracies) # k개의 정확도가 계산됨
stratified k-fold도 있지만 코드는 쓰지 않겠다...
이보다 훨씬 쉬운 방법은 cross_val_score을 활용하는 것이다.
from sklearn.model_selection import cross_val_score, KFold
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
clf = DecisionTreeClassifier(max_depth=2)
kfold = KFold(n_split=5)
cross_val_score(clf, X, y, cv=kfold)
정말 간단하게 진행할 수 있다.