我已经在Torch / lua中实现了多层感知器神经网络,并应用于不平衡数据集(33个要素,大约300个元素,其中约70%的负元素和30%的正元素)。
我尝试了几种型号和几种设置。在当前模型下,我可以获得相当高的真实否定率(大约0.7),但相当低的真实肯定率(大约0.3)。 我真的想提高我的真实阳性率,但是如何?
我将数据集分为训练集,验证集和测试集,并使用验证集查找隐藏层和隐藏单元的最大数量。我目前正在使用学习率= 0.1,迭代次数= 1000。 激活功能为S形。 我尝试了几种神经网络技巧(动量,辍学,Xavier初始化),但并没有带来任何改善。
过去我曾与其他不平衡的数据集一起工作,即使对于较小的班级,我始终能够获得良好的收率。但是这次不是...
令人惊讶的是,我的神经网络在训练过程中表现出色,因为我看到均方误差下降得很快。因此,我希望测试集也能获得良好的结果,但不会发生。
我该怎么做才能提高我的真实阳性率?
这是我的模特:
perceptron = nn.Sequential()
perceptron:add(nn.Linear(this_input_number, this_hidden_units))
perceptron:add(nn.Sigmoid())
for w=1,this_hidden_layers do
perceptron:add(nn.Linear(this_hidden_units, this_hidden_units))
perceptron:add(nn.Sigmoid())
end
perceptron:add(nn.Linear(this_hidden_units, this_output_number))
例如,这是第二次模型训练期间的MSE错误:
$$$ hidden_units = 25 hidden_layers = 1 $$$
completion: 10% (epoch=100)(element=194) loss = 0.04 error progress = 3.56623%
completion: 20% (epoch=200)(element=194) loss = 0.004 error progress = 2.2678%
completion: 30% (epoch=300)(element=194) loss = 0 error progress = 1.56329%
completion: 40% (epoch=400)(element=194) loss = 0.001 error progress = 1.2053%
completion: 50% (epoch=500)(element=194) loss = 0.003 error progress = 0.98677%
completion: 60% (epoch=600)(element=194) loss = 0.004 error progress = 0.84489%
completion: 70% (epoch=700)(element=194) loss = 0 error progress = 0.74345%
completion: 80% (epoch=800)(element=194) loss = 0 error progress = 0.67081%
completion: 90% (epoch=900)(element=194) loss = 0.021 error progress = 0.69629%
completion: 100% (epoch=1000)(element=194) loss = 0.001 error progress = 0.67999%
如您所见,错误迅速变为零。
您可以找到我的complete working Torch code here,其中包括数据集。非常欢迎您在计算机上测试我的代码,并尝试该方法的其他一些变体。
您对如何提高真实阳性率有何建议?谢谢!