Torch / lua,如何将多层感知器神经网络应用于不平衡数据集以提高真实阳性率?

时间:2018-11-14 03:05:54

标签: lua neural-network torch perceptron

我已经在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,其中包括数据集。非常欢迎您在计算机上测试我的代码,并尝试该方法的其他一些变体。

您对如何提高真实阳性率有何建议?谢谢!

0 个答案:

没有答案