首页 > 解决方案 > 神经网络在低密度区域的回归精度

问题描述

我正在开发一个神经网络,它需要预测 -1 和 1 之间的值。但是,我只关心尺度末端的值,比如 -1 和 -0.7 之间以及 0.7 和 1 之间。

例如,如果 0.6 被预测为 0.1,我不介意。但是,我确实想知道它是 0.8 还是 0.9。

我的数据分布大致正常,因此在我不关心准确性的范围内还有更多样本。因此,培训过程似乎可能会导致中心的准确性更高。

我如何配置培训或设计我的预期结果来克服这个问题?

非常感谢。

标签: tensorflowmachine-learningkerasneural-network

解决方案


您可以将观察结果分配给十分位数,将其转换为分类问题,并为您在损失中关心的范围分配更大的权重,或者只是在训练期间对它们进行过采样。默认情况下,我会在损失函数中对类进行加权,因为它可以直接匹配加权指标。如果您知道训练数据的分布与实际数据分布不同,则过采样会很有用。

要使用 Keras 在损失函数中为某些类分配更大的权重,您可以将class_weight参数传递给Model.fit。如果标签 0 是第一个十分位数,标签 9 是最后一个十分位数,则可以将第一个和最后两个十分位数的权重加倍,如下所示:

class_weight = {
    0: 2,
    1: 2,
    2: 1,
    3: 1,
    4: 1,
    5: 1,
    6: 1,
    7: 1,
    8: 2,
    9: 2
}
model.fit(..., class_weight=class_weight)

为了对某些类进行过采样,您将它们包含在批次中的频率要高于类分布所建议的频率。实现这一点的最简单方法是使用numpy.random.choice具有可选参数来指定每个条目的概率的观察索引进行采样。(请注意,KerasModel.fit还有一个sample_weight参数,您可以在其中为训练数据中的每个观察分配权重,这些观察将在计算损失函数时应用,但预期的用例是通过标签中的置信度对样本进行加权,所以我没有不认为它适用于此。)


推荐阅读