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

Python 混合密度网络的K-折叠交叉验证,python,keras,cross-validation,mixture-model,k-fold,Python,Keras,Cross Validation,Mixture Model,K Fold,我试图将k倍交叉验证应用于混合密度模型,使用MSE和R^2分数作为计算交叉验证分数的指标。(我的灵感来自于使用这种技术评估竞争模型的方法) 该模型是有效的,y_pred是有意义的,但我不知道如何解释这些指标,甚至不知道它们是否正确计算。如果y_-true具有形状,比如说(1000,1),那么y_-pred对于3种混合物具有形状(1000,6) 因此,我的第一个问题是,在计算MSE和R^2分数时,Keras对y_pred使用了什么值?(我从这段代码中得到的值根本没有意义。)如果这些值不正确,我应该

我试图将k倍交叉验证应用于混合密度模型,使用MSE和R^2分数作为计算交叉验证分数的指标。(我的灵感来自于使用这种技术评估竞争模型的方法)

该模型是有效的,y_pred是有意义的,但我不知道如何解释这些指标,甚至不知道它们是否正确计算。如果y_-true具有形状,比如说(1000,1),那么y_-pred对于3种混合物具有形状(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)))