我使用 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 会差得多?