Добро пожаловать в переполнение стека.
После того, как вы создали новый фолд, вам нужно сложить его по строкам, используя np.row_stack()
.
Кроме того, я думаю, что вы неправильно нарезаете массив в Python или Numpy поведение нарезки равно [inclusive:exclusive]
, поэтому, когда вы указываете срез как [0:7]
, вы берете только 7 столбцов вместо 8 столбцов объектов, как вы и планировали.
Точно так же, если вы указываете 5-кратное значение для l oop, это должно быть range(k)
, что дает [0,1,2,3,4]
вместо range(k-1)
, которое дает вам только [0,1,2,3]
.
Измененный код как например:
folds = np.array_split(kdata, k) # each fold is 19 rows x 9 columns
np.random.shuffle(kdata) # Shuffle all rows
folds = np.array_split(kdata, k)
for i in range (k):
xtest = folds[i][:,:8] # Set ith fold to be test
ytest = folds[i][:,8]
new_folds = np.row_stack(np.delete(folds,i,0))
xtrain = new_folds[:, :8]
ytrain = new_folds[:,8]
# some print functions to help you debug
print(f'Fold {i}')
print(f'xtest shape : {xtest.shape}')
print(f'ytest shape : {ytest.shape}')
print(f'xtrain shape : {xtrain.shape}')
print(f'ytrain shape : {ytrain.shape}\n')
, который распечатает складку и желаемую форму тренировочных и тестовых наборов для вас:
Fold 0
xtest shape : (19, 8)
ytest shape : (19,)
xtrain shape : (76, 8)
ytrain shape : (76,)
Fold 1
xtest shape : (19, 8)
ytest shape : (19,)
xtrain shape : (76, 8)
ytrain shape : (76,)
Fold 2
xtest shape : (19, 8)
ytest shape : (19,)
xtrain shape : (76, 8)
ytrain shape : (76,)
Fold 3
xtest shape : (19, 8)
ytest shape : (19,)
xtrain shape : (76, 8)
ytrain shape : (76,)
Fold 4
xtest shape : (19, 8)
ytest shape : (19,)
xtrain shape : (76, 8)
ytrain shape : (76,)