如何使用多层感知器并根据偏斜分布特征进行预测

时间:2018-07-29 23:22:04

标签: python machine-learning neural-network keras deep-learning

我对深度学习和Keras还是相当陌生,这个问题困扰了我数周。希望我能从这里得到一些提示。

功能

我模拟了两个变量,每个变量有1万个样本,并遵循标准正态分布:A ~ Norm(0, 1); B ~ Norm(0, 1)

标签

然后我从模拟变量中得出两个标签:y1 = A * B; y2 = A / B

模型

输入尺寸:2

隐藏层:4个密集层,它们全都是32个神经元宽

输出层:具有1个神经元的致密层

激活功能:ReLU用于所有激活功能

编译器:'MSE'是损失函数,'Adam'是优化器,学习速率为1e-05

任务

最后,我设置了三个任务供MLP学习:
(1)使用A,B来预测y1;
(2)使用A,B来预测y2;
(3)使用A,1 / B来预测y2

验证

使用'validation_split = 0.2'验证模型

结果和推断

在任务1中经过10到15个纪元后,对于训练和验证集,它可以很容易地达到MSE以下的水平。但是,对于其他两个任务,我总是会遭受非常高的损失,例如30k + 。

[更新]我还通过Pearson相关系数评估了结果,任务1的返回值为〜0.7,任务2和3的返回值为<0.01。

对我来说很奇怪,因为乘法(y1)和除法(y2)在数学上是相同的。因此,我尝试查看1 / B的分布,发现它的每一边都有非常长的尾巴。我想这可能是困难的根源,但无法解决任何问题。在训练之前,我还尝试将1 / B标准化,但是没有运气。

欢迎任何建议或评论。在网上或书籍上都找不到关于此的讨论,真的想在此方面取得一些进展。谢谢。

1 个答案:

答案 0 :(得分:0)

y2值的分布与y1值有很大不同,具体而言,它将具有更大的绝对值。这意味着直接比较损失是不公平的。

这有点像估算一个人的体重而不是估算一个行星的质量,并且让您因失去数百万英镑而心烦意乱。

为说明起见,请尝试计算所有三个问题的损失,但要使用仅能猜出0.0的估计量。我怀疑问题1的损失会比其他两个损失低得多。