在拥有分类数据时,使用 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库学习----随机森林(RandomForestClassifier,RandomForestRegressor)