#python #pandas #scikit-learn #cross-validation #leave-one-out
#python #pandas #scikit-learn #перекрестная проверка #оставить-один-выход
Вопрос:
Я пытаюсь (плохо) использовать функциональность sklearn LOO, и то, что я хотел бы сделать, это добавить каждый обучающий разделенный набор в столбец фрейма данных с меткой для разделенного индекса. Итак, используя пример со страницы sklearn, но слегка измененный:
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)
Который возвращает:
TRAIN: [1] TEST: [0]
[[2 4]] [[1 3]] [12] [8]
TRAIN: [0] TEST: [1]
[[1 3]] [[2 4]] [8] [12]
В моем случае я хотел бы записать каждое разделенное значение в фрейм данных следующим образом:
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
И так далее.
Мотивация для этого заключается в том, что я хочу попробовать точную интерполяцию разреженных точечных данных. В идеале я хочу запустить интерполяцию / сетку для каждого из обучающих наборов LOO, а затем сложить их. Но я изо всех сил пытаюсь получить доступ к каждому набору поездов, чтобы затем использовать его во что-то вроде griddata
Любая помощь будет оценена по данной проблеме или подходу в целом.
Комментарии:
1. Похоже, разделение правильное, вам просто нужно сложить их, чтобы получить ожидаемый фрейм данных.
2. Спасибо @QuangHoang — извините за боль, но как мне это сделать?
Ответ №1:
Я не совсем понимаю логику вашего фрейма данных, но вы можете попробовать что-то вроде приведенного ниже, чтобы получить свой фрейм данных:
df = []
for train_index, test_index in loo.split(coords):
x = pd.DataFrame({'XY_train':coords[train_index][0],
'XY_test':coords[test_index][0],
'Ztrain':z[train_index][0],
'Ztest':z[test_index][0]})
df.append(x)
df = pd.concat(df)
df
XY_train XY_test Ztrain Ztest
0 2 1 12 8
1 4 3 12 8
0 1 2 8 12
1 3 4 8 12