神经网络模型predict预测值全部为0
预测值为0解决办法
原因一
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
根据上文作者所说
搞不清楚数据的标准化和归一化的关系,想对原始数据做归一化,却误把数据做了标准化,导致用model.predict预测出来的值全是0.0,
在网上搜了好久但是没搜到答案,后来自己又把程序读了一遍,突然灵光一现好像是数据归一化出了问题,
于是把数据预处理部分的标准化改成了归一化,修改过来之后才能正常预测出来值,才得到应有的数据趋势。
标准化
(x-mean(x))/std(x) 这是使用z-score方法规范化
归一化
(x-min(x))/(max(x)-min(x)) 这是常用的最小最大规范化方法
标准化和归一化的应用场景:
一般情况下,如果对输出结果范围有要求,用归一化。
如果数据较为稳定,不存在极端的最大最小值,用归一化。
如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。
在机器学习中,标准化是更常用的手段,归一化的应用场景是有限的。其原因就在于二者的区别:
1、标准化更好保持了样本间距。当样本中有异常点时,归一化有可能将正常的样本“挤”到一起去。
比如三个样本,某个特征的值为1,2,10000,假设10000这个值是异常值,用归一化的方法后,正常的1,2就会被“挤”到一起去。
如果不幸的是1和2的分类标签还是相反的,那么,当我们用梯度下降来做分类模型训练时,模型会需要更长的时间收敛,因为将样本分开需要更大的努力!
而标准化在这方面就做得很好,至少它不会将样本“挤到一起”。
2、标准化更符合统计学假设。对一个数值特征来说,很大可能它是服从正态分布的。
标准化其实是基于这个隐含假设,只不过是略施小技,将这个正态分布调整为均值为0,方差为1的标准正态分布而已。
原因二
输入数据中有nan值
深度学习模型输出为nan的一个隐蔽可能原因以及如何用pandas解决这个nan问题