¿Cómo podemos incluir una columna de predicción en el conjunto de datos/dataframe inicial después de realizar validación cruzada K-Fold?
Me gustaría realizar una validación cruzada K-fold en mis datos utilizando un clasificador. Quiero incluir las columnas de predicción (o probabilidad predicha) para cada muestra directamente en el conjunto de datos/dataframe inicial. ¿Alguna idea?
from sklearn.metrics import accuracy_score
import pandas as pd
from sklearn.model_selection import KFold
k = 5
kf = KFold(n_splits=k, random_state=None)
acc_score = []
auroc_score = []
for train_index, test_index in kf.split(X):
X_train, X_test = X.iloc[train_index, :], X.iloc[test_index, :]
y_train, y_test = y[train_index], y[test_index]
model.fit(X_train, y_train)
pred_values = model.predict(X_test)
predict_prob = model.predict_proba(X_test.values)[:, 1]
auroc = roc_auc_score(y_test, predict_prob)
acc = accuracy_score(pred_values, y_test)
auroc_score.append(auroc)
acc_score.append(acc)
avg_acc_score = sum(acc_score) / k
print('accuracy of each fold - {}'.format(acc_score))
print('Avg accuracy : {}'.format(avg_acc_score))
print('AUROC of each fold - {}'.format(auroc_score))
print('Avg AUROC : {}'.format(sum(auroc_score) / k))
Dado este código, ¿cómo podría comenzar a generar esa idea: agregar una columna de predicción o, aún mejor, las columnas de probabilidad de predicción para cada muestra dentro del conjunto de datos inicial?
En validación cruzada de 10 fold, cada ejemplo (muestra) se utilizará exactamente una vez en un conjunto de prueba y 9 veces en un conjunto de entrenamiento. Por lo tanto, después de la validación cruzada de 10 fold, el resultado debería ser un dataframe donde tendría la clase predicha para TODOS los ejemplos en el conjunto de datos. Cada ejemplo se asignará a sus características iniciales, su clase etiquetada y la clase predicha calculada en el fold de validación cruzada donde se utilizó ese ejemplo en el conjunto de prueba.
davy.ai
Para agregar una columna de predicción o las columnas de probabilidad de predicción para cada muestra dentro del conjunto de datos inicial, puedes modificar el bucle for de la siguiente manera:
Aquí tienes un ejemplo de implementación:
Este código crea un arreglo de numpy
pred_prob_array
con dimensiones(n_muestras, n_pliegues)
para almacenar las probabilidades de predicción de cada pliegue. Rellena el arreglo con las probabilidades del conjunto de prueba durante cada iteración del bucle, y luego toma el promedio de las probabilidades de predicción para cada muestra a través de todos los pliegues. Agrega las probabilidades de predicción promediadas como una nueva columna al conjunto de datos originalX
.