RandomForest中的feature_importance
随机森林算法(RandomForest)的输出有⼀个变量是 feature_importances_ ,翻译过来是 特征重要性,具体含义是什么,这⾥试着解释⼀下。
random翻译参考官⽹和其他资料可以发现,RF可以输出两种 feature_importance,分别是Variable importance和Gini importance,两者都是feature_importance,只是计算⽅法不同。
Variable importance
选定⼀个feature M,在所有OOB样本的feature M上⼈为添加噪声,再测试模型在OOB上的判断精确率,精确率相⽐没有噪声时下降了多少,就表⽰该特征有多重要。
假如⼀个feature对数据分类很重要,那么⼀旦这个特征的数据不再准确,对测试结果会造成较⼤的影响,⽽那些不重要的feature,即使受到噪声⼲扰,对测试结果也没什么影响。这就是 Variable importance ⽅法的朴素思想。
[添加噪声:这⾥官⽹给出的说法是 randomly permute the values of variable m in the oob cases,permute的含义我还不是很确定,有的说法是打乱顺序,有的说法是在数据上加⼊⽩噪声。]
Gini importance
选定⼀个feature M,统计RF的每⼀棵树中,由M形成的分⽀节点的Gini指数下降程度(或不纯度下降程度)之和,这就是M的importance。
两者对⽐来看,前者⽐后者计算量更⼤,后者只需要⼀边构建DT,⼀边做统计就可以。从sklearn的官⽅⽂档对feature_importances_参数的描述来看,sklearn应当是使⽤了Gini importance对feature进⾏排序,同时sklearn把所有的Gini importance以sum的⽅式做了归⼀化,得到了最终的feature_importances_输出参数。