一、 随机森林输出特征重要度
用随机森林进行特征重要性评估的思想其实很简单,通俗来讲就是看每个特征在随机森林中的每颗树上做了多大的贡献,取平均值,然后比较特征之间的贡献大小。
常见的计算方法有两种,一种是平均不纯度的减少(mean decrease impurity),常用gini /entropy /information gain测量,现在sklearn中用的就是这种方法;另一种是平均准确率的减少(mean decrease accuracy),常用袋外误差率去衡量。
平均不纯度计算以gini指数为例:将变量重要性评分(variable importance measures)用VIM来表示,将Gini指数用来表示,假设有m个特征X1,X2,X3,...,Xc,现在要计算出每个特征Xj的Gini指数评分,亦即第j个特征在RF所有决策树中节点分裂不纯度的平均改变量。
Gini指数的计算公式为
其中,K表示有K个类别,pmk表示节点m中类别k所占的比例。 直观地说,就是随便从节点m中随机抽取两个样本,其类别标记不一致的概率。 特征Xj在节点m的重要性,即节点m分枝前后的Gini指数变化量为
其中,和分别表示分枝后两个新节点的Gini指数。
如果,特征Xj在决策树ii中出现的节点在集合M中,那么Xj在第i颗树的重要性为
假设RF中共有n颗树,那么
最后,把所有求得的重要性评分做一个归一化处理即可:
平均准确率的减少(mean decrease accuracy)即对每个特征加躁,看对结果的准确率的影响。影响小说明这个特征不重要,反之重要,具体步骤如下:
1、对于随机森林中的每一颗决策树,使用相应的OOB(袋外数据)数据来计算它的袋外数据误差,记为errOOB1.
2、随机地对袋外数据OOB所有样本的特征X加入噪声干扰(即随机的改变样本在特征X处的值),再次计算它的袋外数据误差,记为errOOB2.
3、假设随机森林中有Ntree棵树,那么对于特征X的重要性=∑(errOOB2-errOOB1)/Ntree,之所以可以用这个表达式来作为相应特征的重要性的度量值是因为:若给某个特征随机加入噪声之后,袋外的准确率大幅度降低,则说明这个特征对于样本的分类结果影响很大,也就是说它的重要程度比较高。
风险:随机森林的变量重要性衡量的并不完全是变量对目标变量预测的贡献能力,而是在这个模型中对目标变量预测的贡献能力,所以单纯用来评价变量的重要性值得探究。例如:我们有A和B两个变量,且A和B之间有较强的相关性,如果A对模型贡献度较大,由于B很像A,所以B也应该对模型贡献较大,但实际上若在随机森林中输出A的特征重要度得分高,B得分往往会很低。
二、逻辑回归计算特征重要度
变量贡献率,反应各自变量对因变量影响程度的相对大小,计算步骤如下:
1. 对所有自变量标准化;
2. 对标准化后的自变量建逻辑回归模型,取各变量回归系数的绝对值;
3. 计算各变量回归系数绝对值的占比即为特征贡献率。
参考:
1. https://blog.csdn.net/zjuPeco/article/details/77371645?utm_source=copy
2. https://blog.csdn.net/code_caq/article/details/74066899?utm_source=copy