我将我的香草铰链损失定义为:
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
。
这是正确的还是有更好的方法来做到这一点?
怎么样:
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,那么它是解决问题的结果。所需班次的线性方程式:
10(s +( - 1))= 1(s + 1)。