Xgboost: 是否有必要在 xgboost 中去除分类任务中无用的特征?

创建于 2017-03-14  ·  3评论  ·  资料来源: dmlc/xgboost

我有 650 多个功能,我使用 xgboost 对这些功能的重要性进行排名。 函数是 get_score(),它返回构建树时出现的特征。

当我查看结果时,有将近 150 个特征的得分低于 20。其中一些是零。 我摆脱了这些功能,看看模型是否会有更好的性能。 但结果与前一个几乎相同。 那么有必要去掉这些不重要的特征吗?

在实验的结果中,特征重要性的新顺序与之前的顺序不同。 有些不太重要的变得重要。 我的意思是特征重要性顺序不稳定。 为什么不稳定?

最有用的评论

在大多数机器学习算法中,重要的是进行特征选择以避免过度拟合。

在 boosting 中,尤其是在 xgboost 中,训练的目的是使您尽可能地泛化(弱学习器、泰勒近似、随机学习……),这使其对过度拟合具有鲁棒性(也就是说,您可以过度-如果你真的想要它:) -> 高迭代次数,高学习率,没有随机学习......)。 要回答您的问题,删除不相关的特征在某一时刻可能很重要。 假设您有异常值,您可能会在学习过程中开始使用那些不相关的特征来对异常值进行分类,这并不好。

对于您的第二个问题,将弱学习器组合以取得良好结果的方法不止一种。 但是,要获得不同的组合(和不同的特征重要性),您必须在训练过程中使用一些随机性,例如 subsample、max_features... 另一种可能性是您具有冗余特征。 您应该检查它们之间的相关性。

总之,如果您知道某个功能无用:将其删除。 如果您不知道,那么让他们知道删除不相关的特征总是好的,因为它会减慢模型的训练速度。

所有3条评论

在大多数机器学习算法中,重要的是进行特征选择以避免过度拟合。

在 boosting 中,尤其是在 xgboost 中,训练的目的是使您尽可能地泛化(弱学习器、泰勒近似、随机学习……),这使其对过度拟合具有鲁棒性(也就是说,您可以过度-如果你真的想要它:) -> 高迭代次数,高学习率,没有随机学习......)。 要回答您的问题,删除不相关的特征在某一时刻可能很重要。 假设您有异常值,您可能会在学习过程中开始使用那些不相关的特征来对异常值进行分类,这并不好。

对于您的第二个问题,将弱学习器组合以取得良好结果的方法不止一种。 但是,要获得不同的组合(和不同的特征重要性),您必须在训练过程中使用一些随机性,例如 subsample、max_features... 另一种可能性是您具有冗余特征。 您应该检查它们之间的相关性。

总之,如果您知道某个功能无用:将其删除。 如果您不知道,那么让他们知道删除不相关的特征总是好的,因为它会减慢模型的训练速度。

谢谢。 我删除了近 150 个不重要的功能。 但是新实验的 auc 没有改变。 所以我没有发现删除它们有任何好处。

如果不能提高性能指标,那么好处就是训练时间。 决策树使用贪婪的方法来寻找最佳分割,因此更多的特征 = 更多的分割要尝试。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

hcho3 picture hcho3  ·  48评论

alexeygrigorev picture alexeygrigorev  ·  42评论

leedrake5 picture leedrake5  ·  74评论

cliveseldon picture cliveseldon  ·  72评论

alonsopg picture alonsopg  ·  37评论