加权铰链损失函数

Weighted hinge loss function

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

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

我正在训练 SVM 来预测事件。我的 y 值是 1 如果是 class 或 -1 如果不是 class。我的 class 不平衡,我的 -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。 如果 y_true = 1.

那么损失就是 hingeloss*10

这是正确的还是有更好的方法?

怎么样:

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 时,它计算为 10。如果您有兴趣知道如何推导表达式中的 11/9 ,它是求解所需位移 s 的线性方程的结果:

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