tgboost
tgboost copied to clipboard
关于离散特征处理的问题
现在的代码逻辑,离散特征也会被装箱(bin) 然后就是按照连续特征来处理了。这样的处理,默认离散特征就是有序的了,所以m个特征值有m-1个箱子。但是如果离散特征是无序的,那么箱子数量应该是指数级的。这个地方是不是可以在优化下那?还是说xgboost就是按照无序来处理的?
参考Spark中决策树对于离散特征的处理会先判断离散特征是有序还是无序的,然后在进行装箱。
才疏学浅,很想把大佬的代码吃透了。。。
@gutouyu xgboost是不支持category特征的 在训练模型之前 需要我们进行预处理 可以根据特征的具体形式 来选择one-hot encoding(无序)还是label encoding(有序)。 当category的特征值非常多时,one-hot encoding会非常稀疏。这时候one-hot encoding的效果可能不好,可以用NN训练一个该category的向量,或者用其他方式来编码。
@liudragonfly xgboost不支持category特征是指这类特征必须编码后才能输入处理吗?我理解的是能够按照有序无序来自动处理就是算支持,否则就是不支持。。。
请多多指教
就是传入的必须是数值类型 比如如果有个星期特征“星期三” xgboost是不支持直接这样输入非数值类型的 至于你编码成0010000(无序)或者3(有序,每周七天从1到7)就得跑实验看看效果了 但编码之后不再是“星期三”这种非数值类型 而是变成数值类型
@liudragonfly 懂了,非常感谢
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.
非常感谢,请问下xgboost也是这么做的吗? @wepe