Escribe las divisiones LOO de sklearn en un dataframe de pandas con el índice como columna de etiquetas.
Estoy intentando (mal) usar la funcionalidad LOO de sklearn y lo que me gustaría hacer es añadir cada conjunto de entrenamiento dividido en una columna de un dataframe con una etiqueta para el índice de la división. Entonces, usando el ejemplo de la página de sklearn, pero ligeramente modificado:
import numpy as np
from sklearn.model_selection import LeaveOneOut
x = np.array([1,2])
y = np.array([3,4])
coords = np.column_stack((x,y))
z = np.array([8, 12])
loo = LeaveOneOut()
loo.get_n_splits(coords)
print(loo)
LeaveOneOut()
for train_index, test_index in loo.split(coords):
print("TRAIN:", train_index, "TEST:", test_index)
XY_train, XY_test = coords[train_index], coords[test_index]
z_train, z_test = z[train_index], z[test_index]
print(XY_train, XY_test, z_train, z_test)
Que devuelve:
TRAIN: [1] TEST: [0]
[[2 4]] [[1 3]] [12] [8]
TRAIN: [0] TEST: [1]
[[1 3]] [[2 4]] [8] [12]
En mi caso, me gustaría escribir cada valor dividido en un dataframe de la siguiente manera:
X Y Ztrain Ztest split
0 1 2 8 12 0
1 3 4 8 12 0
2 1 2 12 8 1
3 3 4 12 8 1
Y así sucesivamente.
La motivación para hacer esto es que quiero probar una interpolación de jackknifing en datos de puntos dispersos. Idealmente, quiero ejecutar una interpolación en cada uno de los conjuntos de entrenamiento LOO y luego apilarlos. Pero estoy teniendo problemas para acceder a cada conjunto de entrenamiento para luego usarlo en algo como griddata.
Cualquier ayuda sería apreciada, tanto para el problema aquí expuesto como para el enfoque en general.
davy.ai
Para crear un dataframe con los valores de división deseados, puedes inicializar un dataframe vacío con las columnas requeridas y usar un bucle para llenarlo de forma iterativa. Aquí tienes un código de muestra que debería hacer el trabajo:
Esto debería crear una nueva fila para cada punto de datos en cada división de entrenamiento, con la división de entrenamiento/prueba indicada en la columna ‘split’. Una vez que tengas este dataframe, deberías poder iterar sobre cada división y usar los datos de entrenamiento para interpolar los datos de prueba utilizando el método que elijas.