pet*_*nce -3 machine-learning data-analysis neural-network keras tensorflow
我有以下输入数据结构:
X1 | X2 | X3 | ... | Output (Label)
118.12341 | 118.12300 | 118.12001 | ... | [a value between 0 & 1] e.g. 0.423645
Run Code Online (Sandbox Code Playgroud)
我使用它tensorflow来解决预测Output变量未来值的回归问题。为此,我构建了一个前馈神经网络,该网络具有三个具有relu激活函数的隐藏层和一个具有一个节点的最终输出层linear activation。该网络使用优化器通过反向传播进行训练adam。
我的问题是,在对网络进行了数千次训练后,我意识到输入特征和输出中的这种高度小数的值仅导致预测接近小数点后第二位,例如:
Real value = 0.456751 | Predicted value = 0.452364
Run Code Online (Sandbox Code Playgroud)
然而,这不被接受,我需要精确到小数点后第四位(至少)才能接受该值。
问:是否有任何值得信赖的技术可以正确解决这个问题以获得更好的结果(也许是转换算法)?
提前致谢。
假设您使用常规 MSE 损失,这可能不适合您对每个实例的错误容忍度相对较低的目的。为了详细说明,MSE 定义如下the average of the the square of the differences between the predicted and true outputs。
假设您有 4 个实例,以及两个经过训练的函数,每个实例都会生成以下错误:
F1 错误率:(4,.0004,.0002,.0002)
F2 错误率:(.9, .9, .9, .9)
很明显,F2 会采用 MSE,因为平均 MSE 为 0.81,而 F1 的平均 MSE 约为 16。
总而言之,MSE 对值 < 1 的小差异给予的权重太小,而由于所square应用的函数,它夸大了值 > 1 的较大差异的权重。
您可以尝试 MAE,它代表平均绝对误差,唯一的区别是它不对单个误差执行平方函数,而是计算绝对值。还有许多其他回归损失可以为较小的误差赋予显着的权重HUBER,例如小增量 (< 0) 的损失,您可以在此处阅读有关这些损失的更多信息。
另一种可能的解决方案是将其转换为分类问题,其中如果预测与小数点后第四位的输出完全相同,则预测为真,否则预测为假。
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |