【发布时间】:2016-05-26 05:51:14
【问题描述】:
我正在尝试在高度不平衡的数据上构建二元分类器神经网络。班级不平衡约为 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 成本而不是二次成本?
【问题讨论】:
-
您的功能看起来如何?作为人类,你能从特征中预测类别吗?功能在哪个范围内?
-
有大约 370 个特征,不,我无法猜测仅通过检查观察会属于哪些类别。它们是稀疏的,范围从 0 到 1 或 0 到 1000。我事先对数据进行了标准化,但仍然有同样的问题。
标签: python machine-learning neural-network