xgboost:有没有办法对比率/百分比数据执行回归?

数据挖掘 回归 线性回归 xgboost 分配
2021-10-02 17:41:39

我有一个因变量,,由比率/百分比数据组成,因此每个值都介于01. 我被 xgboost 库所吸引,因为它允许专注于训练本身的特定数据子集,但我对如何对我拥有的数据执行回归感到困惑。

如果您不将可能性更改为Beta 分布或其他限制在同一范围内的东西,正常 OLS 回归将产生超出和低于 [0,1] 范围的输出,但 xgboost 会遭受同样的错误吗?

我将不胜感激有关尝试使其发挥作用的任何建议。

3个回答

原则上:是的,您将遇到与 OLS 相同的问题。但是,由于xgboost是基于树的(并且通过该非参数),您可能会得到相对准确的估计,这意味着低于零或高于 1 的值将很少见(至少问题应该不如 OLS 严重)。在这种情况下,您可以简单地将结果限制为是的^[0,1]. 另一种方法是做一个多类分类任务,你有 100 个类是的=[1%,2%,...,100%]. Boosting 通常在分类任务上表现良好。

只是一个提示:xgboost在数据处理中可能有点“沉重”。诸如此类的增强工具lightgbm是一个不错的选择。我更lightgbm喜欢xgboost.

您可以使用reg:logistic目标函数。 https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters

编辑:您需要为此使用内部 API,或者将 sklearn APIXGBRegressorobjective='reg:logistic'(或binary:logistic)一起使用。
不要使用XGBClassifier,因为它会对目标进行标签编码!

我同意所有这些答案,这是一个回归案例。如果您能够将目标值拆分为多个类,则可以将其转换为分类案例。

但我也会尝试以这种方式转换目标值:

old_target = function(new_target)
new_target = inverse_function(old_target)

例如,softmax 看起来很有希望。它将为您提供另一个目标值范围:

(-inf, inf)

然后,您在这个转换后的目标上训练 XGBRegressor。

通常,function() 的类型取决于目标值分布。