【发布时间】:2017-09-08 11:52:33
【问题描述】:
我想为 pearson 相关性as defined here 创建一个自定义指标
我不确定如何将其准确应用于 y_pred 和 y_true 的批次
我做了什么:
def pearson_correlation_f(y_true, y_pred):
y_true,_ = tf.split(y_true[:,1:],2,axis=1)
y_pred, _ = tf.split(y_pred[:,1:], 2, axis=1)
fsp = y_pred - K.mean(y_pred,axis=-1,keepdims=True)
fst = y_true - K.mean(y_true,axis=-1, keepdims=True)
corr = K.mean((K.sum((fsp)*(fst),axis=-1))) / K.mean((
K.sqrt(K.sum(K.square(y_pred -
K.mean(y_pred,axis=-1,keepdims=True)),axis=-1) *
K.sum(K.square(y_true - K.mean(y_true,axis=-1,keepdims=True)),axis=-1))))
return corr
我是否有必要使用keepdims 并手动处理批次维度并取其平均值?还是 Keras 会以某种方式自动执行此操作?
【问题讨论】:
-
你的
y_trainingvar 是什么形状的? -
对不起... [batchsize x 10]
-
每个样本十个特征?
-
这是一个预测 10 个值的向量的回归。所以 y_true, y_pred 样本的维度是 10。
-
我不是一个学过足够统计学的人...所以,你想把这个公式分别应用于这 10 个特征中的每一个(这是
split的目的吗?)还是它可以一次将公式应用于所有这些吗? -- 如果第二个选项没问题,我的回答应该没问题。如果没有,我可以尝试纠正它以瞄准正确的轴。
标签: python machine-learning keras metric