我正在使用此处找到的 scikit-learn 梯度提升分类器。
如果我在相同的数据上运行分类器而不播种随机数生成器,我会得到不同的特征重要性,值得注意的是,不同的每次都是 0。如果我只看特征重要性 < .005 的特征,会出现大多数相同的特征,但也有一些变化。
我的问题是,除了计算时间之外,这是否有影响?如果它会损害准确性,我想那将是由于过度拟合。但是,如果分类器已经识别出相对不重要的特征,那不就解决了问题吗?
如果它确实会损害准确性,我应该如何选择要摆脱的功能?
我正在使用此处找到的 scikit-learn 梯度提升分类器。
如果我在相同的数据上运行分类器而不播种随机数生成器,我会得到不同的特征重要性,值得注意的是,不同的每次都是 0。如果我只看特征重要性 < .005 的特征,会出现大多数相同的特征,但也有一些变化。
我的问题是,除了计算时间之外,这是否有影响?如果它会损害准确性,我想那将是由于过度拟合。但是,如果分类器已经识别出相对不重要的特征,那不就解决了问题吗?
如果它确实会损害准确性,我应该如何选择要摆脱的功能?
前段时间我在一个项目中使用了梯度提升分类器。我们有大约 130 个功能,由于系统必须在微控制器上实现,我试图尽可能减少功能的数量。
下图显示了使用前 n 个最重要特征训练的 GBC 模型的性能(F1 分数):
从这张图片看来,130 个特征中只有 30 个已经达到了“足够好的性能”,而其他 100 个(不重要的)特征似乎没有太大的正面或负面影响。
仅当您在 Y 轴上放大一点时,您才会看到:
这表明性能在 130 个特征中的 90 个达到峰值 (0.93)。因此,如果您想要最好的模型,那么 40 个特征并不重要。
要回答您的问题“这对计算时间有影响吗? ”:它确实对性能有影响,因为性能再次下降,超过 90 个功能,但只是轻微下降。
要回答您的第二个问题“如果确实会损害准确性,我应该如何选择要摆脱的功能? ”:
我做了以下事情:
如何在步骤 1) 中选择前 n 个特征:
我实际上没有使用 GBC 进行特征选择,而是使用随机森林。我不知道为什么,但我的实验表明,使用 RF 选择特征然后在其上训练 GBC 模型比使用 GBC 选择特征然后在其上训练 GBC 模型效果更好。
随机森林和 GBT 对冗余特征具有鲁棒性,因此准确性不太可能受到负面影响。某些特征的重要性非常低是它们被忽略的证据。因为树是以贪婪的方式构建的,随机起点不同的特征最终可能会被忽略。如果特征 Foo 和 Bar 包含冗余信息,则如果首先选择 Foo,则 Bar 将被忽略 - 反之亦然。