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