我的问题是句子分类,这是一个两级预测问题:句子是否属于班级" 1"或班级" 0"?为了解决这个问题,我使用的是CNN。
但是,我想强制模型惩罚课堂上的错误" 1"更重要的是,因为对我来说更重要的是模型预测了班级" 1"可靠的,即对班级的误报" 0"是可以容忍的。
为此,我改变了成本函数。每当出现错误且错误发生在类" 1"时,返回值2,否则返回1。如果没有错误,则返回0。这应该具有如果预测是" 0"则成本增加的效果,但它应该是" 1",与相反的情况相比。
这是我的代码(抱歉这个烂摊子。)
def class_imbalanced_errors(self,y_pred,y):
expr=lambda a,b: T.switch(T.neq(a,b),T.switch(T.neq(a,T.constant(1)),T.constant(1),T.constant(2)),T.constant(0))
x,y = theano.scan(expr,sequences=[y,y_pred])
return x
该函数返回值为2,1或0的向量,具体取决于错误类型。然后,这个向量的平均值就是最终成本。
我的问题:
这是给两个类赋予不同权重的正确方法吗? 我的实施似乎是正确的吗?