随机森林 sklearn 变量重要性
Random Forest sklearn Variable Importance
sklearn
的 RandomForestClassifier
的属性 feature_importance_
给出的变量重要性值可以解释为百分比吗?我知道当在拆分时使用特定特征时,它是所有树的杂质指数减少的平均值 point.What 是 feature_importance_
值的范围?对于1000个特征的数据集,如果feature_importance_
的取值范围为0~0.05,大部分特征为0,只有少数特征略有增加,是否说明数据有噪声?
does this show that the data is noisy ?
你的问题很笼统,不看数据真的无法回答问题。
但是,将 feature_importance_
值视为百分比的一种简单方法是对其值进行标准化:
importance_sum = sum(rf.feature_importance_)
feature_importance_as_percent = [100*(x/sum) for x in rf.feature_importance_]
I understand that its the average of reduction in impurity index over all trees when a particular feature is used at split point.
这是正确的。让我们看看如何详细计算单棵树的特征重要性[1]。杂质减少是分裂前节点的杂质减去分裂后两个子节点杂质的总和。这是针对每个特征在树中的所有拆分上取平均值。然后,将重要性归一化:每个特征重要性除以重要性总和。
因此,从某种意义上说,单个树的特征重要性是百分比。它们总和为 1,描述了单个特征对树的总杂质减少的贡献程度。
随机森林的特征重要性计算为所有树的重要性的平均值。它们仍然可以看作是单个特征的部分缩减。您可以(并且应该)验证它们是否是一对一的。
What is the range of feature_importance_ values ?
理论上,由于重要性标准化的方式,范围是 0 到 1。然而,在实践中,范围将相当低。随机森林随机选择数据的特征和子集,因此很有可能在拆分中使用所有特征。即使它们不是很重要,它们也会占总重要性的一小部分。由于重要性应该是一对一的,因此您拥有的功能越多,重要性总体上会越低。
feature_importance_ values range from 0~0.05, with most of the features at 0, only a few showing a slight increase, does this show that the data is noisy ?
不,这很可能意味着您的样本很少 and/or 树(估计量)很少。重要性为 0 很可能意味着森林中根本没有使用该功能。由于这个分类器的随机性,所有的特征都应该至少使用一点。所以这表明执行的拆分不多。
我假设您没有很多树,因为 n_estimators=10
的默认值非常低。大多数文献建议使用 100 或 1000 棵树。不能太多,这样只会降低性能。
最后提醒一句
不要过分依赖特征重要性。如果一个特征比另一个特征具有更高的重要性,它可能意味着它更重要但你不能确定:
例如,假设您复制了一个特征并将其作为新特征添加到数据中。原有特性和新特性应该同等重要。但是,无论何时执行拆分,都只能选择其中一个,因此有一半时间会随机选择原始特征。这也使原始特征的重要性减半!如果另一个不在,新功能和原始功能的重要性将只有它们的一半。
如果数据中的某些特征是相关的(实际上是统计相关的),它们的重要性将低于同样重要的不相关特征。
sklearn
的 RandomForestClassifier
的属性 feature_importance_
给出的变量重要性值可以解释为百分比吗?我知道当在拆分时使用特定特征时,它是所有树的杂质指数减少的平均值 point.What 是 feature_importance_
值的范围?对于1000个特征的数据集,如果feature_importance_
的取值范围为0~0.05,大部分特征为0,只有少数特征略有增加,是否说明数据有噪声?
does this show that the data is noisy ?
你的问题很笼统,不看数据真的无法回答问题。
但是,将 feature_importance_
值视为百分比的一种简单方法是对其值进行标准化:
importance_sum = sum(rf.feature_importance_)
feature_importance_as_percent = [100*(x/sum) for x in rf.feature_importance_]
I understand that its the average of reduction in impurity index over all trees when a particular feature is used at split point.
这是正确的。让我们看看如何详细计算单棵树的特征重要性[1]。杂质减少是分裂前节点的杂质减去分裂后两个子节点杂质的总和。这是针对每个特征在树中的所有拆分上取平均值。然后,将重要性归一化:每个特征重要性除以重要性总和。
因此,从某种意义上说,单个树的特征重要性是百分比。它们总和为 1,描述了单个特征对树的总杂质减少的贡献程度。
随机森林的特征重要性计算为所有树的重要性的平均值。它们仍然可以看作是单个特征的部分缩减。您可以(并且应该)验证它们是否是一对一的。
What is the range of feature_importance_ values ?
理论上,由于重要性标准化的方式,范围是 0 到 1。然而,在实践中,范围将相当低。随机森林随机选择数据的特征和子集,因此很有可能在拆分中使用所有特征。即使它们不是很重要,它们也会占总重要性的一小部分。由于重要性应该是一对一的,因此您拥有的功能越多,重要性总体上会越低。
feature_importance_ values range from 0~0.05, with most of the features at 0, only a few showing a slight increase, does this show that the data is noisy ?
不,这很可能意味着您的样本很少 and/or 树(估计量)很少。重要性为 0 很可能意味着森林中根本没有使用该功能。由于这个分类器的随机性,所有的特征都应该至少使用一点。所以这表明执行的拆分不多。
我假设您没有很多树,因为 n_estimators=10
的默认值非常低。大多数文献建议使用 100 或 1000 棵树。不能太多,这样只会降低性能。
最后提醒一句
不要过分依赖特征重要性。如果一个特征比另一个特征具有更高的重要性,它可能意味着它更重要但你不能确定:
例如,假设您复制了一个特征并将其作为新特征添加到数据中。原有特性和新特性应该同等重要。但是,无论何时执行拆分,都只能选择其中一个,因此有一半时间会随机选择原始特征。这也使原始特征的重要性减半!如果另一个不在,新功能和原始功能的重要性将只有它们的一半。
如果数据中的某些特征是相关的(实际上是统计相关的),它们的重要性将低于同样重要的不相关特征。