我将我的香草铰链损失定义为:
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
。
这是对的还是有更好的方法呢?
答案 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)。