Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为CatBoostRegressor实现自定义目标函数_Python_Machine Learning_Catboost - Fatal编程技术网

Python 为CatBoostRegressor实现自定义目标函数

Python 为CatBoostRegressor实现自定义目标函数,python,machine-learning,catboost,Python,Machine Learning,Catboost,我正在使用CatBoostRegressor解决一个有监督的学习问题,我想使用一个自定义的目标函数,但我不知道如何以一种与CatBoost完全兼容并优化计算效率的方式实现它 我面临着选择RMSE(均方根误差)和MAE(平均绝对误差)之间的权衡,因此我定义了一个定制的目标函数,试图在这两个世界中取其精华 RMSE倾向于产生“无偏”估计量,因为在一组数字上最小化RMSE会导致找到其平均值。另一方面,它往往比大量的小错误更严重地惩罚少量的大错误。下面是一个有两个数据点的示例:如果误差为[5,5],则R

我正在使用CatBoostRegressor解决一个有监督的学习问题,我想使用一个自定义的目标函数,但我不知道如何以一种与CatBoost完全兼容并优化计算效率的方式实现它

我面临着选择RMSE(均方根误差)和MAE(平均绝对误差)之间的权衡,因此我定义了一个定制的目标函数,试图在这两个世界中取其精华

RMSE倾向于产生“无偏”估计量,因为在一组数字上最小化RMSE会导致找到其平均值。另一方面,它往往比大量的小错误更严重地惩罚少量的大错误。下面是一个有两个数据点的示例:如果误差为[5,5],则RMSE为7.07,而如果误差为[0,10],则RMSE为10

MAE的优点是,平均惩罚少量大错误和大量小错误(在上面的示例中,[5,5]和[0,10]都有MAE=5)。另一方面,它倾向于产生有偏估计量,因为最小化一组数字上的MAE会导致找到其中值,如果存在异常值,中值可能与平均值显著不同

我想定义一个成本函数,它充分利用了这两个方面:

1) 我的代价函数应该像MAE一样,平均惩罚少量的大错误和大量的小错误

2) 我的成本函数应该倾向于产生无偏估计:在一组数字上最小化我的成本函数应该得到它的平均值,就像RMSE一样

我们的想法是接受MAE并惩罚偏见。下面是成本函数的Python代码:

import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error

# Root mean squared error (RMSE)
def rmse(y_true, y_pred):
    return np.sqrt(mean_squared_error(y_true, y_pred))

# Mean absolute error (MAE)
def mae(y_true, y_pred):
    return mean_absolute_error(y_true, y_pred)

# Custom loss function: mean absolute error + bias
def my_error_function(y_true, y_pred):
    return np.mean(np.abs(y_true - y_pred)) + np.abs(np.mean(y_true - y_pred))

RMSE和MAE已经在CatBoost()中实现。我在这里找到了一个关于实现自定义损失函数的教程,但是我不能根据我的公式修改成本函数,因为它需要用C++()编写。非常感谢您的帮助。

您的问题和您的问题到底是什么?我的问题是,我无法将此成本函数作为CatBoostRegressor的自定义目标来实施。我的问题是如何以完全兼容CasBooD和计算效率的方式实现它(即使用C++代替Python,如这里所建议的)谢谢Anna Veronika。恐怕我无法打开链接:我收到一条错误消息“服务器未响应”。请查看教程,其中包含如何在catboost中实现您的目标的示例:我已更新了链接。您的问题和您的问题到底是什么?我的问题是,我无法将此成本函数作为CATBoostregrestor的自定义目标来实现。我的问题是如何以完全兼容CasBooD和计算效率的方式实现它(即使用C++代替Python,如这里所建议的)谢谢Anna Veronika。恐怕我无法打开链接:我收到一条错误消息“服务器未响应”,请查看教程,其中包含如何在catboost中实现目标的示例:我已更新了链接。