machine-learning - 低估和高估的不同成本

标签 machine-learning scikit-learn regression linear-regression random-forest

我有一个回归问题,但成本函数不同:低估的成本高于高估的成本。例如,如果预测值 < 真实值,则成本将为 3*(true-predicted)^2;如果预测值 > 真实值,则成本将为 1*(真实预测)^2。

我正在考虑使用经典回归模型,例如线性回归、随机森林等。我应该进行哪些修改来调整此成本函数?

据我所知,scikit-learn等ML API不提供直接修改成本函数的功能。如果我必须使用这些 API,我该怎么办?

有什么推荐的读物吗?

最佳答案

您可以使用 Tensorflow(或 theano)来实现自定义成本函数。常见的线性回归实现是 here .

要了解如何实现自定义成本函数,查看在 tensorflow 中实现的 huber 损失函数可能会对您有所帮助。这是您的自定义成本函数,您应该在链接代码中替换它,而不是

cost = tf.reduce_sum(tf.pow(pred-Y, 2))/(2*n_samples)

在链接的代码中,您将拥有:

error = y_known - y_pred
condition = tf.less(error, 0)
overestimation_loss = 1 * tf.square(error)
underestimation_loss = 3 * tf.square(error)    
cost = tf.reduce_mean(tf.where(condition, overestimation_loss, underestimation_loss))

这里,当条件为真时,误差小于零,这意味着 y_known 小于 y_pred,因此您会高估损失,因此 tf.where 语句将选择 overestimation_loss,否则低估损失。

秘诀在于,您将计算这两种损失,并使用 tf.where 和条件选择在何处使用它们。

更新:

如果想使用其他库,如果huber loss已实现,您可以看看以获取想法,因为 huber 损失是与您类似的条件损失函数。

关于machine-learning - 低估和高估的不同成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44791431/

相关文章:

r - 如何使用 R 中的 stargazer 在同一行中输出多个变量

python - 如何在 Python 中进行三次或更高多项式多元回归?

excel - 将值替换为该列的平均值 - 许多列

python - sklearn KNN 中的加权距离

r - 拟合具有多个 LHS 的线性模型

python - 从 sklearn 的 MLPClassifier 中检索最终的隐藏激活层输出

python - 如何在不进行插补的情况下处理 KNN 中的缺失数据?

ios - MobileNet vs SqueezeNet vs ResNet50 vs Inception v3 vs VGG16

r - 使用随机森林创建二元结果

变量值列表的 Tensorflow 特征列