1

我使用 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 的结果要差得多。

方法一

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)

方法二

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)

这是输出。

方法一

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

方法二

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

对于两种方法,我的 epoch 结束时的 train_loss 几乎相同,但是为什么在使用 5-CV 和 cross_val_predict 时 mse 和 r2 会差得多?

4

0 回答 0