(k-fold) Cross Validation
Consiste em dividir o conjunto de dados em k folds.
Em cada execução do modelo, k-1 folds são usados para treinamento e 1 fold (o restante) é usado como teste.
Repita o processo até que todos os folds tenham sido usados para teste.
O erro final é o valor médio de todas as métricas de erro.
Um maior número de folds levará a uma melhor estimativa de erro do modelo. No entanto, isso vem com um maior custo computacional.
Se tivermos um conjunto de dados grande, um k menor pode ser suficiente, já que teremos uma maior quantidade de dados para treinamento.
Se tivermos um conjunto de dados pequeno, podemos usar a validação cruzada leave-one-out para maximizar a quantidade de dados para treinamento.
Leave-one-out Cross Validation
x = x.drop(['Name','Sex','Age', 'Ticket', 'Cabin', 'Embarked'], axis=1)
clf = DecisionTreeClassifier(criterion = 'gini', max_depth = 10, random_state = 2021)
scores= cross_val_score(scl, x, y, cv = 10) # cv -> n° de folds
print(scores)
print("RESULT: %0.2f accuracy with a standatd deviation of %o.2f" % (scores.mean(), scores.std()))
'''
==> OUTPUT
[0.58889 0.6179 0.52809 0.50345 0.6128 0.703445 ...]
RESULT: 0.63 accuracy with a standard deviation of 0.08
'''
Com k-folds:
'''
Iterating manually (with K-fold, Repeated K-fold, Leave One Out, Shuffle Split, Stratified k-fold, Timeseriessplit, ...)
'''
print ("USING A DECISION TREE WITH MANUAL ITERATION (KFold) and obtaining confusion matrix...")
from sklearn.model selection import KFold
scores = []
kf = KFold(n_splits=10)
for train, test in kf.split(X):
clf.fit(x.loc[train, :], y.loc[train, :])
score = clf. score(X.loc[test, :], y.loc[test, :1)
scores append (score)
Y_predicted = clf. predict (X.loc[test, :])
print("Confusion Matrix:")
print (confusion_matrixy.loc[test, :], Y_predicted))
print (score)
print (RESULT: %0.2f accuracy with a standard deviation of %0.2f" % (np.mean(scores), np.std(scores)))
'''
==> OUTPUT
USING A DECISION TREE WITH MANUAL ITERATION (KFold) and obtaining confusion matrix...
Confusion Matrix:
[[45 6]
[27 12]]
0.6333333333333333
Confusion Matrix:
[[33 36]
| 8 12]]
0.5056179775280899
Confusion Matrix:
[[38 17]
[19 15]]
0.5955056179775281
RESULT: 0.65 accuracy with a standard deviation of 0.06
'''