sklearn Select-K-Best 剪枝会降低性能吗?

Posted

技术标签:

【中文标题】sklearn Select-K-Best 剪枝会降低性能吗?【英文标题】:sk-learn Can Select-K-Best pruning decrease the performance?sklearn Select-K-Best 剪枝会降低性能吗? 【发布时间】:2017-11-27 07:20:12 【问题描述】:

我的基本模型是具有 65 个特征的逻辑回归分类器。

我现在从这 65 个特征中推断出所有可能的多项式特征,然后对前 100 个特征进行 SelectKBest 修剪(使用 chi2 标准)。 当我将其与我的基本模型进行比较时,我发现精度和召回率显着降低。

我的问题是为什么 selectKBest 在任何情况下都会降低性能?如果外推多项式特征没有用,那么它应该选择原始的 65 个特征,从而为我提供与基本模型相同或更好的性能。

我无法理解 selectKBest 特征修剪如何影响我的表现?

【问题讨论】:

【参考方案1】:

chi2 标准不是魔法;多项式特征对于 chi2 来说可能特别难以正确,因为 chi2 特征选择通过消除它们之间具有高度 线性 依赖性的特征来工作。

更新:

假设我们有特征 x 和 y; x=2y。最多 2 次的多项式展开将为我们提供 x、y、xy、x^2 和 y^2。如果我们替换 x=2y,我们得到 2y、y、2y^2、4y^2 和 y^2。

在选择 chi2 之后,我们应该留下像 y 和 y^2 这样的东西,因为它们是唯一的线性独立特征。根据数据和分类器,新的多项式特征 y^2 可能会使结果变得更糟或更好,无论如何都没有性能保证。

如您所见,chi2 不支持选择原始 y 特征,它也保留 y^2,即使在这个简单的示例中也是如此。

在现实世界中,在特征选择过程中会有权衡。例如,如果存在与 y 相关但不完全相关的特征 z(即,它提供了额外的信息,但不多),那么 chi2 测试可能会消除 z,但不会消除 y^2,因为 y^2 不会对 y 具有线性依赖关系,而 z 具有。在这种情况下,保留 z 会更好,因为 z 提供了额外的信息,这与 y^2 不同。这是 chi2 测试如何消除有用功能并保留冗余功能的示例。

【讨论】:

这样的话,是不是应该恢复到原来的特性,而不是选择损害性能的特性呢?如果我在这里遗漏了什么,请原谅我。 chi2 不保证性能;它甚至不知道性能是什么(即不使用标签)。所以它完全有可能损害性能。但这是个好问题。我已经扩展了我的答案。

以上是关于sklearn Select-K-Best 剪枝会降低性能吗?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn专题一:决策树

黑客/克隆 sklearn 以支持修剪决策树?

sklearn库学习----决策树(分类树DecisionTreeClassifier)

大数据项目8(sklearn决策树)

sss

sklearn基础篇-- 决策树(decision tree)