Scikit 学习模型赋予随机变量权重?我应该删除不太重要的功能吗?

Posted

技术标签:

【中文标题】Scikit 学习模型赋予随机变量权重?我应该删除不太重要的功能吗?【英文标题】:Scikit learn models gives weight to random variable? Should I remove features with less importance? 【发布时间】:2020-10-16 01:00:30 【问题描述】:

我通过删除相关变量和向后消除来进行一些特征选择。然而,作为测试完成后,我输入了一个随机变量,然后训练了逻辑回归、随机森林和 XGBoost。所有 3 个模型的随机特征的特征重要性都大于 0。首先,这怎么可能?其次,所有型号都将其排在最后,但它不是最低的功能。这是另一轮特征选择的有效步骤吗?删除所有得分低于随机特征的人?

随机特征是用

创建的
model_data['rand_feat'] = random.randint(100, size=(model_data.shape[0]))

【问题讨论】:

【参考方案1】:

这可能会发生,您采样的随机数是多少,但是这种随机采样仍然可以偶然生成一个模式。我不知道您是在进行分类还是回归,但让我们考虑二进制分类的简单示例。我们有 1 类和 0 类以及 1000 个数据点。当您为每个数据点采样一个随机数时,可能会发生例如大多数 1 类获得高于 50 的值,而大多数 0 类获得小于 50 的随机数。

所以最终,这可能会导致某种模式。所以我猜每次你运行你的代码时,随机特征重要性都会发生变化。它总是排名靠后,因为不太可能生成好的模式(例如,所有 1 都高于 50,而所有 0 都低于 50)。

最后,是的,您应该考虑删除低价值的功能

【讨论】:

【参考方案2】:

我同意 berkay 的回答,即随机变量可能具有与您的结果变量偶然相关的模式。其次,我既不会在模型构建中包含随机变量,也不会作为我的过滤阈值,因为如果随机变量偶然与结果具有显着或几乎显着的关联,它将抑制原始数据的重要特征的表达,您最终可能会失去那些重要的特征功能。

【讨论】:

【参考方案3】:

在模型开发的早期阶段,我总是包含两个随机变量。

对我来说,这就像一个“健全性检查”,因为这些实际上是垃圾变量或垃圾特征。

如果我的任何功能比垃圾功能更重要,那么这是一个警告信号,我需要更仔细地查看这些功能的价值*,或者做一些更好的功能工程。

例如,关于包含这些特征的理论建议是什么?

【讨论】:

以上是关于Scikit 学习模型赋予随机变量权重?我应该删除不太重要的功能吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何调整随机森林模型中的特征权重?

[机器学习与scikit-learn-36]:算法-分类-一元离散随机变量=>样本空间=>古典概率模型(事件自然数等概率均匀分布)

如何为scikit学习随机森林模型设置阈值

在 scikit 学习随机森林模型中,预期和预测的数组最终相同

从机器学习输出中获取输入

在 Python scikit learn 中为 12 个随机森林创建循环