【机器学习】用iml和mlr解释机器学习
笔者邀请您,先思考:
1您怎么解释机器学习模型?
2 特征的重要性如何度量?
机器学习模型时常胜过模型的可解释性,参数模型如线性回归模型。模型性能的提高有一定的代价,模型当作一个无法解释的黑盒子在运作。
幸运的是,有很多方法可以使机器学习模型可以解释。 R包iml提供分析任何黑盒机器学习模型的工具:
-
特征重要性:哪些是最重要的功能?
-
特征效果:特征如何影响预测? (部分依赖图和个别条件期望曲线)
-
单一预测的解释:单个数据点的特征值如何影响其预测? (LIME和Shapley值)
-
替代树:我们可以用一个简短的决策树来近似潜在的黑盒子模型吗?
iml包适用于任何分类和回归机器学习模型:随机森林,线性模型,神经网络,xgboost等。
这篇文章向您展示了如何使用iml软件包分析机器学习模型。 mlr软件包使得机器学习模型的训练变得非常容易,而iml软件包可以轻松提取关于学习到的黑盒机器学习模型的见解。
如果您想了解更多关于所有方法的技术细节,请阅读可解释的机器学习手册。
让我们来探索iml工具箱,用具体的例子来解释mlr机器学习模型!
-
数据:波士顿房屋
-
拟合机器学习模型
-
使用iml预测器容器
-
特征的重要性
-
部分依赖
-
替代模型
-
用局部模型解释单一的预测
-
用博弈论解释单一的预测
数据:波士顿房屋
我们将使用MASS :: Boston数据集来演示iml包的功能。 该数据集包含来自波士顿社区的中位房屋价值。
data("Boston", package = "MASS")
head(Boston)
拟合机器学习模型
首先,我们训练一个随机森林来预测波士顿的房屋价值中位数:
if(!require(mlr)) {
install.packages("mlr")
require(mlr)
}
tsk <- makeRegrTask(
data = Boston,
target = "medv"
)
lrn <- makeLearner(
"regr.randomForest",
ntree = 100
)
mod <- train(lrn, tsk)
使用iml预测器容器
我们创建一个Predictor对象,它包含模型和数据。 iml包使用R6类:可以通过调用Predictor $ new()来创建新对象。Predictor与mlr模型最适合
(WrappedModel类),但也可以使用其他包中的模型。
if(!require(iml))
{
install.packages("iml")
require(iml)
}
X <- Boston[which(names(Boston) != "medv")]
predictor <- Predictor$new(mod, data = X, y = Boston$medv)
特征的重要性
我们使用FeatureImp可以测量每个特征对于的预测有多重要。 特征的重要性测量通过对每个特征进行洗牌并测量性能下降情况而起作用。 对于这个回归任务,我们选择用平均绝对误差(’mae’)来衡量模型性能的损失; 另一个选择将是均方误差(’mse’)。
一旦我们创建了FeatureImp的新对象,重要性就会自动计算出来。 我们可以调用对象的plot()函数或查看data.frame中的结果。
imp <- FeatureImp$new(predictor, loss = "mae")
plot(imp)
imp$results
部分依赖
除了了解哪些特征很重要之外,我们对特征如何影响预测结果感兴趣。 Partial类实现了部分依赖图和单个条件期望曲线。 当我们改变其中一个特征(例如,x轴上的’lstat’)时,每条线代表一个数据点的预测(y轴)。 突出显示的行是各行的逐点平均值,并等于部分依赖图。 x轴上的标记表示“lstat”特征的分布,显示了一个区域与解释的相关程度(很少或没有意味着我们不应该过度解释该区域)。
pdp.obj <- Partial$new(predictor, feature = "lstat")
plot(pdp.obj)
如果我们想要计算另一个特征的局部依赖曲线,我们可以简单地重置特征。 另外,我们可以将曲线居中放置在我们选择的特征值处,这样可以更容易地看到曲线的趋势:
pdp.obj$set.feature("rm")
pdp.obj$center(min(Boston$rm))
plot(pdp.obj)
替代模型
另一种使模型更易解释的方法是用一个更简单的模型 – 一个决策树来替代黑匣子。 我们对黑箱模型(在我们的例子中是随机森林)进行预测,并对原始特征和预测结果进行决策树训练。 该图显示了拟合树的终端节点。 maxdepth参数控制树可以增长的深度以及它是如何解释的。
tree <- TreeSurrogate$new(predictor, maxdepth = 2)
plot(tree)
我们可以使用树来做出预测:
head(tree$predict(Boston))
用局部模型解释单一的预测
全局替代模型可以提高对全局模型行为的理解。 我们也可以在拟合局部模型,更好地理解单一预测。 由LocalModel拟合的局部模型是一个线性回归模型,数据点通过它们与数据点的接近程度来加权,以便我们解释预测。
lime.explain <- LocalModel$new(predictor, x.interest = X[1,])
lime.explain$results
plot(lime.explain)
用博弈论解释单一的预测
解释个人预测的另一种方法是来自联合博弈论Shapley价值的一种方法。 假设对于一个数据点,特征值一起玩游戏,其中他们将预测作为支付。 Shapley值告诉我们如何公平分配特征值之间的支付。
shapley <- Shapley$new(predictor, x.interest = X[1,])
plot(shapley)
我们可以重用该对象来解释其他数据点:
data.frame表单中的结果可以像这样提取:
results <- shapley$results
head(results)
原文链接:
https://mlr-org.github.io/interpretable-machine-learning-iml-and-mlr/
作者: Christoph Molnar
版权声明:作者保留权利,严禁修改,转载请注明原文链接。
您有什么见解,请留言。
文章推荐:
加入数据人圈子或者商务合作,请添加笔者微信。
数据人网是数据人学习、交流和分享的平台http://shujuren.org 。专注于从数据中学习到有用知识。
平台的理念:人人投稿,知识共享;人人分析,洞见驱动;智慧聚合,普惠人人。
您在数据人网平台,可以1)学习数据知识;2)创建数据博客;3)认识数据朋友;4)寻找数据工作;5)找到其它与数据相关的干货。
我们努力坚持做原创,聚合和分享优质的省时的数据知识!
我们都是数据人,数据是有价值的,坚定不移地实现从数据到商业价值的转换!
点击阅读原文,进入数据人网,获取数据知识。
公众号推荐:
链达君,专注于分享区块链内容。
数据科学与人工智能,专注于分享数据科学与人工智能的内容。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!