Machine learning 低估和高估的不同成本

Machine learning 低估和高估的不同成本,machine-learning,scikit-learn,regression,linear-regression,random-forest,Machine Learning,Scikit Learn,Regression,Linear Regression,Random Forest,我有一个回归问题,但成本函数不同:低估的成本高于高估的成本。例如,如果预测值真实值,则成本将为1*(真实预测)^2 我正在考虑使用经典回归模型,如线性回归、随机森林等。我应该做哪些修改来调整此成本函数 据我所知,像scikit learn这样的ML API不提供直接修改成本函数的功能。如果我必须使用这些API,我能做什么 有任何推荐的阅读资料吗?您可以使用Tensorflow(或theano)进行自定义成本函数。常见的线性回归实现是 要了解如何实现自定义成本函数,查看tensorflow中实现的

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

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

据我所知,像scikit learn这样的ML API不提供直接修改成本函数的功能。如果我必须使用这些API,我能做什么

有任何推荐的阅读资料吗?

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

要了解如何实现自定义成本函数,查看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语句将选择高估损失,否则选择低估损失

秘密在于,您将计算这两种损失,并使用tf.where和condition选择使用它们的位置

更新:


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

您可以使用非对称成本函数使您的模型高估或低估。您可以将此中的成本函数替换为:

有关更多详细信息,请参见此

def acost(a): return tf.pow(pred-Y, 2) * tf.pow(tf.sign(pred-Y) + a, 2)