我在尝试预处理生物数据以训练神经网络,尽管我已经广泛搜索并反复了解了各种标准化方法,但仍然无法确定在何种情况下应该使用哪种方法。特别是,我有许多输入变量呈现正偏态,我一直在尝试确定是否有最适合的标准化方法。
我还担心这些输入的性质是否会影响网络的性能,因此我尝试了数据变换(特别是 logarithm 变换)。然而,一些输入包含许多零值,同时也可能是很小的十进制值,似乎对 log(x + 1)(或从1到0.0000001的任何数字)变换非常敏感,结果分布未能接近正态分布(仍然偏态或变成双峰分布,具有在最小值处的尖锐峰值)。
这些对神经网络来说是否相关?即,我是否应该使用特定的特征变换/标准化方法来处理偏态数据,还是应该忽略它,选择一种标准化方法并继续前进?
对此事宜的任何建议将不胜感激!
谢谢!
回答:
由于你的输入向量中的特征性质各不相同,你应该为每个特征使用不同的标准化算法。网络应该在每个输入上接收统一的数据以获得更好的性能。
正如你所述,有些数据是偏态的,我认为你可以运行一些算法来“标准化”它。如果应用对数变换不起作用,或许可以尝试其他函数和方法,例如秩变换。
如果小十进制值完全出现在某个特定特征中,那么只需以特定方式对其进行标准化,使它们转换到你的工作范围内:我认为是 [0, 1] 或 [-1, +1]。
如果一些输入包含许多零值,可以考虑从主神经网络中移除它们,并创建一个额外的神经网络,该网络将处理非零特征的向量。或者,你可以尝试运行主成分分析(例如,通过结构为 N-M-N 的自关联记忆网络,M < N)来减少输入空间维度,从而消除零值成分(它们实际上会在新的组合输入中以某种方式被考虑)。顺便说一下,新的 M 个输入将自动被标准化。然后你可以将新的向量传递给你的实际工作神经网络。