混合密度网络的K折交叉验证

时间:2020-08-11 19:38:32

标签: python keras cross-validation mixture-model k-fold

我正在尝试使用MSE和R ^ 2得分作为计算交叉验证得分的指标,将k倍交叉验证应用于混合物密度模型。 (我受到this article的启发,该技术使用这种技术来评估竞争模型)。

该模型有效并且 y_pred 很有意义,但是我不确定如何解释这些指标,甚至不确定它们是否正确计算。如果 y_true 的形状为(1000,1),则3种混合物的 y_pred 的形状为(1000,6)。

因此,我的第一个问题是,在计算MSE和R ^ 2分数时,Keras对 y_pred 使用什么价值? (由于该代码而获得的值根本没有意义。)如果这些值不是正确的值,那么我应该使用哪些值来计算交叉验证得分?

谢谢。

# k-folds cross-validator
num_folds = 5
kfold = KFold(n_splits=num_folds, shuffle=True)
cvscores_mse = []
cvscores_r2 = []

def r2_score(y_true, y_pred):
    SS_res = bk.sum(bk.square(y_true - y_pred))
    SS_tot = bk.sum(bk.square(y_true - bk.mean(y_true)))
    return (1 - SS_res/(SS_tot + bk.epsilon()))

                                                                                                
# Train model for each fold
for train, test in kfold.split(X_train, y_train):
    model = ks.Model(inputs=inputs, outputs=outputVector)
    model.compile(optimizer=ks.optimizers.Adam(learning_rate=lr, clipvalue=1.0),
                  loss=mean_log_gaussian_like,
                  metrics=['mse', r2_score])

    # Fit the model
    history = model.fit(X_train[train], y_train[train],
                        validation_data=(X_train[test], y_train[test]),
                        batch_size=batch,
                        epochs=epoch)

    # Preserve the history 
    mse = history.history['mse']
    val_mse = history.history['val_mse']
    r2_score = history.history['r2_score']
    val_r2_score= history.history['val_r2_score']

    # Evaluate the model on the test data using 'evaluate'
    scores = model.evaluate(X_train[test], y_train[test], verbose=0, batch_size=128)
    print("%s: %.2f%%" % (model.metrics_names[1], scores[1] * 100))
    print("%s: %.2f%%" % (model.metrics_names[2], scores[2] * 100))
    print("Validation loss, Validation RMSE, Validation R^2:", scores)

    cvscores_mse.append(scores[1] * 100)
    cvscores_r2.append(scores[1] * 100)
    print("%.2f%%(+/-%.2f%%)" % (np.mean(cvscores_r2), np.std(cvscores_r2)))

0 个答案:

没有答案