R语言实现可理解的随机森林模型(Random Forest)——iml包

1. 介绍

机器学习模型通常可以很好地进行预测,但无法解释。 iml包提供了用于分析任何黑匣子机器学习模型的工具:The iml package provides tools to analyze machine learning models and predictions.

机器学习步骤: 我们主要是想通过iml包理解机器学习的黑盒子的运行过程和原理。
在这里插入图片描述

2. 理解随机森林运行机理

2.1导入需要的包

library("iml")
library(randomForest)
library(partykit)
library(glmnet)
data("Boston", package  = "MASS")
head(Boston)

2.2 构建随机森林模型

set.seed(123)
rf = randomForest(crim ~ ., data = Boston, ntree = 500,importance = T)

2.3 RF特征重要性:

特征重要性度量是通过改变每个特征并测量性能下降多少来起作用,而并非代表重要程度。回归分析中一般使用MAE(平均绝对误差),分类中一般使用MSE(均方误差)。

# 数据划分为自变量X和因变量y
X = Boston[which(names(Boston) != "crim")]
#X <- Boston[-which(names(Boston) == "crim")]
# Predictor$new:创建一个预测对象
predictor = Predictor$new(rf, data = X, y = Boston$crim)

#### 特征重要性
imp = FeatureImp$new(predictor, loss = "mae")
plot(imp)
print(imp$results)

特征重要性结果展示:
在这里插入图片描述

2.4 特征对预测结果的影响

ALE: 局部累积效果,显示了当特征变化时预测结果如何变化。x轴上的标记表示“ lstat”特征的分布,显示了一个区域与预测结果的相关性,很少或没有点表示我们不应过度解释该区域。
这是一个非常重要的部分,可以帮助我们理解数据是否对结果具有可靠性。你可以把这一步单独放到你的机器学习模型中去,检查数据的可靠性,类似于偏依赖图。

# 特征对预测结果的影响
ALE = FeatureEffect$new(predictor, feature = "lstat")
plot(ALE)
# 所有特征的ALE效果展示
ALE_effs = FeatureEffects$new(predictor)
plot(ALE_effs)

结果展示:
在这里插入图片描述
所有特征的ALE效果展示:
在这里插入图片描述

2.5 交互作用

衡量要素之间相互作用的强烈程度。 交互作用量度取决于交互作用解释了y的方差度量介于0(无交互)和1(y~.因交互而引起的方差的100%)之间所有自变量与indus进行交互。

#### 交互作用
interact_1 = Interaction$new(predictor, feature = "indus")
plot(interact_1)
# 所有自变量之间进行交互对y的影响
interact_all = Interaction$new(predictor)
plot(interact_all)

交互结果:
在这里插入图片描述
在这里插入图片描述

2.6 替代模型(Decision tree surrogate model)

使模型更易于解释的另一种方法是用一个更简单的模型:决策树替换黑匣子

# 替代模型
tree_local = TreeSurrogate$new(predictor, maxdepth = 3)
plot(tree_local)
plot(tree_local$tree)
# 使用替代模型进行预测
set.seed(1234)
X.sample <-  X[sample(1:nrow(X), 10), ]
a<-tree$predict(X.sample)
head(a)

结果展示: 决策树的最大深度为3
在这里插入图片描述

当然树的深度也可以更大,这里为8,但是这样看上去好像很复杂,不太能体现出数据的分布特点:
在这里插入图片描述
在这里插入图片描述

head(a):
.y.hat
1 0.4903775
2 0.1342809
3 0.1342809
4 0.1342809
5 0.1342809
6 0.1342809

2.7 LocalModel方法

# LIME使用距离度量来计算加权glm的接近权值
# 使用LocalModel方法解释数据集的第一个实例:
lime.explain <- LocalModel$new(predictor, x.interest = X[1,], k = 3)
lime.explain
lime.explain$results
plot(lime.explain)

在这里插入图片描述

结果显示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/amyniez/article/details/129129526