tgboost icon indicating copy to clipboard operation
tgboost copied to clipboard

关于离散特征处理的问题

Open gutouyu opened this issue 6 years ago • 6 comments

现在的代码逻辑,离散特征也会被装箱(bin) 然后就是按照连续特征来处理了。这样的处理,默认离散特征就是有序的了,所以m个特征值有m-1个箱子。但是如果离散特征是无序的,那么箱子数量应该是指数级的。这个地方是不是可以在优化下那?还是说xgboost就是按照无序来处理的?

参考Spark中决策树对于离散特征的处理会先判断离散特征是有序还是无序的,然后在进行装箱。

才疏学浅,很想把大佬的代码吃透了。。。

gutouyu avatar Feb 28 '18 06:02 gutouyu

@gutouyu xgboost是不支持category特征的 在训练模型之前 需要我们进行预处理 可以根据特征的具体形式 来选择one-hot encoding(无序)还是label encoding(有序)。 当category的特征值非常多时,one-hot encoding会非常稀疏。这时候one-hot encoding的效果可能不好,可以用NN训练一个该category的向量,或者用其他方式来编码。

liudragonfly avatar Feb 28 '18 10:02 liudragonfly

@liudragonfly xgboost不支持category特征是指这类特征必须编码后才能输入处理吗?我理解的是能够按照有序无序来自动处理就是算支持,否则就是不支持。。。

请多多指教

gutouyu avatar Mar 01 '18 06:03 gutouyu

就是传入的必须是数值类型 比如如果有个星期特征“星期三” xgboost是不支持直接这样输入非数值类型的 至于你编码成0010000(无序)或者3(有序,每周七天从1到7)就得跑实验看看效果了 但编码之后不再是“星期三”这种非数值类型 而是变成数值类型

liudragonfly avatar Mar 01 '18 07:03 liudragonfly

@liudragonfly 懂了,非常感谢

gutouyu avatar Mar 01 '18 07:03 gutouyu

tgboost-python 这个分支的实现,不支持类别特征处理,也就是把任何输入当成数值型特征,所以需要用户自己预处理类别特征。master分支 的实现支持类别特征处理:

Handle categorical feature, TGBoost order the categorical feature by their statistic (Gradient_sum / Hessian_sum) on each tree node, then conduct split finding as numeric feature.

wepe avatar Mar 06 '18 11:03 wepe

非常感谢,请问下xgboost也是这么做的吗? @wepe

gutouyu avatar Mar 16 '18 01:03 gutouyu