Apliquemos también este enfoque a Iris. Y, también aquí, hagámoslo en primer lugar con el bloque X_copy obtenido en la sección anterior que contiene apenas 5 muestras de Iris:
Importamos la clase LeaveOneOut y la instanciamos:
Y también en esta clase el método .split() genera los índices de entrenamiento y validación:
print(train_index, test_index)
[0 2 3 4] [1]
[0 1 3 4] [2]
[0 1 2 4] [3]
[0 1 2 3] [4]
Comprobamos que el bloque de validación contiene el índice de una única muestra y ésta toma todos y cada uno de los valores posibles.
Probemos entonces este método en el dataset original. En este caso no hace falta reinstanciar la clase, pues no admite parámetros de ningún tipo:
for train_index, test_index in loo.split(X):
model.fit(X.iloc[train_index], y.iloc[train_index])
scores.append(model.score(X.iloc[test_index], y.iloc[test_index]))
Echemos un vistazo a los scores: