Tensorflow 如何在keras中将斯皮尔曼秩相关性指定为损失函数?

Tensorflow 如何在keras中将斯皮尔曼秩相关性指定为损失函数?,tensorflow,keras,tensorflow2.0,tf.keras,Tensorflow,Keras,Tensorflow2.0,Tf.keras,我想写一个损失函数,最大化keras中两个向量之间的spearman秩相关性。不幸的是,我找不到一个现有的实现,也找不到一个好的方法来计算keras中向量的秩,因此我可以自己使用这个公式来实现它 def rank_correlation(y_true, y_pred): pass model = tensorflow.keras.Sequential() #### More model code model.compile(loss=rank_correlation) 有人能帮我实现

我想写一个损失函数,最大化keras中两个向量之间的spearman秩相关性。不幸的是,我找不到一个现有的实现,也找不到一个好的方法来计算keras中向量的秩,因此我可以自己使用这个公式来实现它

def rank_correlation(y_true, y_pred):
    pass

model = tensorflow.keras.Sequential()
#### More model code
model.compile(loss=rank_correlation)

有人能帮我实现排名相关吗?

你可以尝试以下方法

from scipy.stats import spearmanr
def compute_spearmanr(y, y_pred):
    spearsum = 0
    cnt = 0 
    for col in range(y_pred.shape[1]):
        v = spearmanr(y_pred[:,col], y[:,col]).correlation
        if np.isnan(v):
            continue
        spearsum += v
        cnt += 1
    res = spearsum / cnt
    return res

a = np.array([[2., 1., 2., 3.],[3., 3., 4., 5.]] )
b = np.array([[1., 0., 0., 3.], [1., 0., 3., 3.]])
compute_spearmanr(a, b) 
0.9999999999999999