样本随机森林分类的​​特征重要性

机器算法验证 Python 随机森林 scikit-学习
2022-03-21 05:06:54

这是来自的交叉帖子:https ://datascience.stackexchange.com/questions/8208/feature-importance-for-random-forest-classification-of-a-sample

使用随机森林是否可以确定哪些特征是将特定样本分类为 A 类的驱动特征?

我知道我可以问哪些特征对执行任何样本的分类更重要,但我可以问这个特定样本吗?例如,为什么样本 1 被归类为 A?它的哪些功能更像 A 类而不是 B 类?

问这个关于随机森林的问题是否有意义?

关于如何在 python 中使用 sklearn 的奖励积分:)

1个回答

变量重要性解释了袋外交叉验证预测误差的增加。仅考虑一个样本的预测误差变化是可能的,但没有意义。由于只能正确或错误地预测一个样本,因此这样的术语将非常不稳定和粗略。

您可以查看“局部变量重要性”、“部分依赖图”或“特征贡献”。这是我的包 forestFloor 中使用功能贡献的示例。每个图显示预测类概率的变化作为每个变量的函数。对于 iris 数据集,没有强变量交互作用。因此,模型结构可以归结为二维可视化。R 平方项量化了模型结构与这种仅解释/可视化的主要影响的偏差程度。

library(forestFloor)
library(randomForest)
data(iris)
X = iris[,!names(iris) %in% "Species"]
Y = iris[,"Species"]

rf = randomForest(X,Y,
                  keep.forest=TRUE, #mandatory for classification
                  replace=FALSE,    #if TRUE use trimTrees::cinbag, not randomForest
                  keep.inbag=TRUE,  #mandatory always for forestFloor
                  sampsize =15 )    #optional:smaller trees smoother model structure

ff = forestFloor(rf.fit  = rf,           # mandatory
                 X       = X,            # mandatory
                 calc_np = "sad monkey", # this input takes no effect for classification
                 binary_reg = FALSE)     # can change two class classification to regression
# Thus cannot be TRUE for IRIS (three class)

plot(ff,plot_GOF=TRUE,cex=.7,
     colLists=list(c("#FF0000A5"),
                   c("#00FF0050"),
                   c("#0000FF35")))

在此处输入图像描述