加权铰链损失功能

时间:2019-04-18 23:46:10

标签: python tensorflow machine-learning loss-function

我将我的香草铰链损失定义为:

def hinge(y_true, y_pred):    
    return tf.maximum(0., 1- y_true*y_pred)

我正在训练SVM来预测事件。我的y值是1(如果是该类),或者-1(如果不是该类)。我班上的不平衡之处是我的-1+1多得多。

因此,我想将损失+1加权为更高的罚款。但是我不怎么确切地改变铰链损失。我能想到的最好的是

X = (# of non event samples) / (# of event samples)
if(y_true*y_pred > 0):
    return tf.maximum(0., 1- y_true*y_pred)*X

这意味着,如果我有100个非事件和10个事件,则X = 100/10 = 10。 如果是hingeloss*10,则损失为y_true = 1

这是对的还是有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

怎么样:

def hinge(y_true, y_pred):    
    return tf.multiply((11/9+y_true)*9/2,tf.maximum(0., 1- y_true*y_pred))

这里的逻辑是,如果y_true为1,我们想乘以10;如果为-1,我们想乘以1。您可以检查y_true为-1时,(11/9+y_true)*9/2的计算结果为1,而当{{1}}的计算结果为1时,计算结果为10。如果您想知道如何在expession中导出11/9 ,这是求解线性方程式所需位移s的结果:

10(s +(-1))= 1(s + 1)。