我使用Keras来设置神经网络。作为输入数据,我使用向量,其中每个坐标可以是0(特征不存在或未测量),也可以是一个范围在5000到10000之间的值。
所以我的输入值分布是一种高斯中心假设在7500附近加上一个非常薄的峰值在0。
我不能移除某些坐标为0的向量因为几乎所有的向量在某些位置都有0
所以我的问题是:"如何最好地规范化输入向量?"我看到两种可能:
- 只需减去平均值并除以标准差。问题是,均值被大量无意义的0所偏倚,而std被高估了,这就抹去了有意义测量中的细微变化。
- 计算非零坐标上的均值和标准差,更有意义。但是,所有与非测量数据对应的0值都将得到高(负)值,这对无意义的数据具有一定的重要性。
谁有什么建议吗?
谢谢!
相反,将您的特征表示为二维:
- 第一个是特征的归一化值,如果它是非零的(其中对非零元素计算归一化),否则为0
- 如果特征为0,则秒为1,否则为1。这确保可以区分来自原始0或标准化0的前一个特征中的0
你可以认为这是编码额外的功能,说"另一个功能缺失"。这样,每个特征的尺度被归一化,所有的信息被保留