Python 当有分类数据时,使用Sklearn random forest进行特征选择并不能提供预期的结果

Python 当有分类数据时,使用Sklearn random forest进行特征选择并不能提供预期的结果,python,scikit-learn,random-forest,feature-selection,Python,Scikit Learn,Random Forest,Feature Selection,我想使用SKlearn随机森林特征选择函数来了解影响我的自变量(TN污染物浓度)的关键因素。 我有一个分类变量-气候类型,有五种气候类型(温度炎热、温度干燥、温度温暖、热带和干旱),我知道气候类型对我的自变量有很大的影响,但是,当我使用一种炎热的编码方法(通过熊猫假人)时,我发现了这些气候类型(在一次热编码后变成五个假/真的变量)是最不重要的,这是不正确的 如图所示,气候变量的特征重要性得分最低: 我的问题是,在处理分类变量时,随机林的特征选择是否仍然有用?我是否做了一些错误的事情 这是我代码的

我想使用SKlearn随机森林特征选择函数来了解影响我的自变量(TN污染物浓度)的关键因素。 我有一个分类变量-气候类型,有五种气候类型(温度炎热、温度干燥、温度温暖、热带和干旱),我知道气候类型对我的自变量有很大的影响,但是,当我使用一种炎热的编码方法(通过熊猫假人)时,我发现了这些气候类型(在一次热编码后变成五个假/真的变量)是最不重要的,这是不正确的

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

我的问题是,在处理分类变量时,随机林的特征选择是否仍然有用?我是否做了一些错误的事情

这是我代码的一部分:

  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'])

这完全取决于特征重要性的计算方式。如果特征的特征重要性是其拆分节点次数的函数,则很难比较数值和分类值,因为数值特征可以(并且通常)在树中拆分多次,其中类别只拆分一次


我不完全确定,但我认为sklearn中的特征重要性是特征拆分数量的函数,因此是错误引导的重要性。

这一切都取决于特征重要性的计算方式。如果特征的特征重要性是其拆分一个节点的次数的函数,那么很难确定比较数值和分类值,因为数值特征可以(通常是)在树中拆分多次,其中类别只拆分一次


我不完全确定,但我认为sklearn中的特征重要性是特征拆分数量的函数,因此是错误的重要性。

谢谢!我发现基于杂质减少的特征选择偏向于选择更多类别的变量。有一篇文章报告说,随机森林变量在潜在预测变量的测量范围或类别数量不同的情况下,不可靠的重要性度量是不可靠的()。本文还提供了避免这种偏差的另一种方法,我可能会在我的案例中尝试实现这种方法。谢谢!我发现基于杂质减少的特征选择偏向于选择具有更多类别的变量。有一篇论文报告说,在潜在的预测变量在其测量范围或类别数量()上有所不同。本文还提供了一种避免这种偏差的替代方法,我可能会在我的案例中尝试实现这种方法。