阻止网络预测所有网络

时间:2016-03-10 05:10:27

标签: python machine-learning neural-network

我正在尝试在高度不平衡的数据上构建二元分类器神经网络。阶级不平衡率约为99%:1%。即使在对数据进行加权以创建50-50样本时,也似乎存在问题。网络要么停留在低精度,要么猜测所有零以获得最大99%的准确度。设置较低的响应阈值似乎也不起作用。有没有办法创建一个适用于不平衡类或可以模拟梯度提升的成本函数?我想实现一些能够积极学习异常值的东西,并对零的错误预测进行惩罚。我尝试以下列方式修改成本函数,但它没有改进算法。

class QuadraticCost(object):
def fn(output, y):
    if y == 1 and output < 0.5: fun = 100*0.5*np.linalg.norm(output-y)**2
    else: fun = 1*0.5*np.linalg.norm(output-y)**2
    return fun

def delta(z, a, y):
    return (a-y) * sigmoid_prime(z)

(在我的反向传播算法中,我使用以下总成本函数进行随机梯度下降,其中eta等于学习速率,而lambda是正则化参数)

有关如何修改成本以惩罚虚假0的任何想法都将非常感激。谢谢!

编辑:有没有办法修改反向传播算法以使用ROC-AUC成本而不是二次成本?

1 个答案:

答案 0 :(得分:1)

这实际上非常简单。您的成本是附加的,这意味着它只是形式

L({(x_i,y_i)}, w) = SUM_i l(h(x_i|w), y_i) + C theta(w)

其中theta是正则化惩罚(在你的代码L2范数中),h(x_i | w)是你对x_i和当前参数w的预测,而l(a,b)是用于给出预测时间的逐点成本标签是b。只需将费用更改为

即可
L({(x_i,y_i)}, w) = SUM_i importance(y_i) * l(h(x_i|w), y_i) + C theta(w)

其中重要性(a)是a类的重要性,因此在你的情况下你可以使用重要性(0)= 0.001和重要性(1)= 1,导致网络关注&#34; 1&#34;实例1000倍以上&#34; 0&#34; s。附加性使得梯度的计算变得非常简单,因为您只需要将样本i的梯度乘以非常相同的重要性。您可以将其视为使用两种不同的学习率 - 大多数班级的小学习率和少数班级的大学习率(从数学角度来看,这几乎是相同的)。唯一的区别是当你使用小型游戏时(那么这种学习速率解释不再有效,因为你有这样的学习率加权平均值)。