惩罚二进制分类问题中的假阴性

时间:2018-10-08 20:32:04

标签: machine-learning keras deep-learning classification loss-function

在二元分类问题中,我试图对假阴性的惩罚要比对假阳性的惩罚更大。

自定义损失函数看起来像:受here

的启发
def w_categorical_crossentropy(y_true, y_pred, weights):
    nb_cl = len(weights)
    final_mask = K.zeros_like(y_pred[:, 0])
    y_pred_max = K.max(y_pred, axis=1)
    y_pred_max = K.reshape(y_pred_max, (K.shape(y_pred)[0], 1))
    y_pred_max_mat = K.cast(K.equal(y_pred, y_pred_max), K.floatx())
    for c_p, c_t in product(range(nb_cl), range(nb_cl)):
        final_mask += (weights[c_t, c_p] * y_pred_max_mat[:, c_p] * y_true[:, c_t])
    return K.categorical_crossentropy(y_pred, y_true) * final_mask

以下是在上述函数中传递到权重参数的权重:

w_array = np.ones((2,2))
w_array[1,0] = 2.5 # penalizing FN
w_array[0,1] = 2.5 # penalizing FP

以我的理解,第一行惩罚FN,第二行惩罚FP。当我尝试运行此代码时,FN / FP的数量与权重相同的情况几乎相同,如下所示

w_array = np.ones((2,2))
#w_array[1,0] = 2.5 # penalizing FN
#w_array[0,1] = 2.5 # penalizing FP

跟进:如果我只是简单地注释掉w_array中的第二个任务,这是否意味着我只是对FN而不是FP进行了惩罚。 final_mask在这里的重要性是什么?

函数调用和用法:

loss = lambda y_true, y_pred: w_categorical_crossentropy(y_true, y_pred, weights=w_array)

classifier.compile(optimizer = sgd, loss = loss, metrics = ['accuracy'])

0 个答案:

没有答案