Вывод cross_val_predict

#cross-validation #skorch

#перекрестная проверка #скорч

Вопрос:

Я использовал skorch для обучения моей модели, которая определена следующим образом,

 net_reg = NeuralNetRegressor(
    Network_binaryDC,
    batch_size=32,
    lr=0.01,
    max_epochs=1000,
    criterion=nn.MSELoss,
    optimizer=torch.optim.Adam,
    train_split=None,
    iterator_train__shuffle=True
)
 

Когда я использую следующие два метода (с или без 5-CV) для прогнозирования результата, я обнаружил, что результат от 5-CV намного хуже.

Способ 1

 net_reg.fit(X, y)
y_pred = net_reg.predict(X)
mse_train = mean_squared_error(y, y_pred)
r2_train = r2_score(y, y_pred)
 

Способ 2

 y_pred = cross_val_predict(net_reg, X, y, cv=5)
mse_train = mean_squared_error(y, y_pred)
r2_train = r2_score(y, y_pred)
 

Вот результат.

Способ 1

 epoch    train_loss     dur
-------  ------------  ------
...
996       23.6809  0.0090
997       23.8153  0.0080
998       24.9554  0.0090
999       25.1953  0.0090
1000       28.5202  0.0100

mse_train: 27.771873
r2_train: 0.9892790619950554
 

Способ 2

 epoch    train_loss     dur
-------  ------------  ------
...
996       36.4650  0.0090
997       31.8118  0.0090
998       31.5955  0.0100
999       28.3348  0.0100
1000       30.0020  0.0080

mse_train: 2985.767
r2_train: 0.23378432943403352
 

Потери поезда в конце моих эпох почти одинаковы для двух методов, но почему mse и r2 намного хуже при использовании 5-CV с cross_val_predict?