在拥有分类数据时,使用 Sklearn 随机森林进行特征选择并没有给我预期的结果

Posted

技术标签:

【中文标题】在拥有分类数据时,使用 Sklearn 随机森林进行特征选择并没有给我预期的结果【英文标题】:Using Sklearn random forest for feature selection does not give me expected outcome when having categorical data 【发布时间】:2021-01-22 00:29:58 【问题描述】:

我想使用 SKlearn 随机森林特征选择功能来了解影响我的自变量(TN 污染物浓度)的关键因素是什么。 我有一个分类变量——气候类型,有五种气候(温热、温干、温热、热带和干旱),我知道气候类型对我的自变量影响很大,但是,当我使用One hot encoding 方法(通过 pandas get_dummies),我发现这些气候类型(在一个 hot encoding 后变成了五个具有 false/true 的变量)最不重要,这是不正确的。

如图所示,气候变量的特征重要性得分最低:

我的问题是随机森林的特征选择在处理分类变量时是否仍然有用?如果我做错了什么?

这是我的代码的一部分:

  model = RandomForestRegressor(n_estimators=100, bootstrap = True,max_features = 'sqrt')

  model.fit(x_train, y_train)

  fi = pd.DataFrame('feature': list(x_train),'importance': 
  model.feature_importances_).sort_values('importance', ascending = False)

  plt.bar(fi['feature'],fi['importance'])

【问题讨论】:

【参考方案1】:

这完全取决于如何计算特征重要性。如果一个特征的特征重要性是它分裂一个节点多少次的函数,那么很难比较数值和分类值,因为数值特征可以(并且经常)在树中被分裂多次,其中类别只拆分一次。

我不完全确定,但我认为 sklearn 中的特征重要性是特征分割量的某种函数,因此具有误导性的重要性。

【讨论】:

谢谢!我看到基于杂质减少的特征选择偏向于更喜欢具有更多类别的变量。有一篇论文报告说,在潜在预测变量的测量规模或类别数量不同的情况下,随机森林变量重要性测量不可靠(doi.org/10.1186/1471-2105-8-25)。本文还提供了一种避免这种偏见的替代方法,我可能会为我的案例寻求实施。

以上是关于在拥有分类数据时,使用 Sklearn 随机森林进行特征选择并没有给我预期的结果的主要内容,如果未能解决你的问题,请参考以下文章

sklearn中的随机森林

sklearn 随机森林分类器可以处理分类变量吗?

sklearn库学习----随机森林(RandomForestClassifier,RandomForestRegressor)

来自 sklearn 的 SelectFromModel 在随机森林和梯度提升分类器上提供了显着不同的特征

如何在sklearn中计算随机森林模型的AUC?

使用随机森林对文本文档进行分类