【问题标题】:Regression problem where predicted value must be a whole number预测值必须是整数的回归问题
【发布时间】:2020-08-05 00:51:18
【问题描述】:

我正在研究预测值必须为正整数的回归问题。一种方法可能是只训练一个模型,进行预测,然后对预测值进行四舍五入。但是,我想尝试一种不同的方法来修改损失函数。我在 Keras 中这样尝试过:

def my_custom_loss_fn(y_actual, y_predicted):
   y_predicted_rounded = K.round(y_predicted)
   custom_loss_value = K.sqrt(tf.keras.losses.mean_squared_error(y_actual, y_predicted_rounded))
   return custom_loss_value

抛出错误:没有为任何变量提供梯度:...这个问题很可能是因为 K.round 函数没有梯度。

我的问题是:是否有任何其他优雅的方式或什至不同的框架(如 xgboost 等)我可以修改丢失的函数,使得损失是 y_actual 和 y_predicted 的均方根误差已四舍五入。

【问题讨论】:

  • 这不是回归问题(输出不连续),是分类问题。

标签: keras regression loss-function


【解决方案1】:

您的问题的另一种选择是将您的整个问题作为一个分类问题。

也就是说,您将数据集从回归数据转换为分类数据。更正式的使用原则是分桶。这样,如果一个值介于 15.0 和 30.0 之间,则您将类别 X 分配给属于此区间的每个数据点。

预测的正整数当然是 category_id。

然后,根据数据点的数量,您可以扩展/缩小间隔的数量。您还摆脱了尝试实现自定义损失函数的任何问题。

如果这不是您的问题的确切情况,那么在不“篡改”损失函数的情况下舍入最终结果是一种好方法,就像您在问题定义中所建议的那样。

【讨论】:

    猜你喜欢
    • 2014-09-08
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2021-07-03
    • 2020-08-07
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多