代码之家  ›  专栏  ›  技术社区  ›  Jonathan

加权铰链损失函数

  •  0
  • Jonathan  · 技术社区  · 5 年前

    我将我的普通铰链损失定义为:

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

    我正在训练SVM来预测一个事件。还有我的 y 值为 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 回复  |  直到 5 年前
        1
  •  1
  •   Juan Carlos Ramirez    5 年前

    怎么样:

    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,如果是-1,则是1。你可以在什么时候检查 y真 IS - 1, (11/9+y_true)*9/2 计算结果为1,如果为1,则计算结果为10。如果您有兴趣知道如何推导支出中的11/9,它是求解所需位移s的线性方程的结果:

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