软件开发公司 R说念话立地丛林的模子讲明(重视)
图片
图片
图片
图片
图片
图片
图片
今天给大师先容若何使用randomForestExplainer对立地丛林模子的效力进行讲明。
从名字就能看出来,randomForestExplainer是有利为randomForest包拓荒的模子讲明R包,亦然DrWhy.AI系列器用的一部分。
比较于其他的通用的模子讲明R包,这个包有一些独有的功能,不错对立地丛林模子进行格外详备的讲明。
安设# 2选1install.packages("randomForestExplainer")devtools::install_github("ModelOriented/randomForestExplainer")加载R包和数据
使用一个转头数据集进行演示。其中medv是效力变量(房价),其余是猜度变量(13个猜度变量)
library(randomForest)library(randomForestExplainer)data(Boston, package = "MASS")Boston$chas <- as.logical(Boston$chas)str(Boston)## 'data.frame': 506 obs. of 14 variables:## $ crim : num 0.00632 0.02731 0.02729 0.03237 0.06905 ...## $ zn : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...## $ indus : num 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...## $ chas : logi FALSE FALSE FALSE FALSE FALSE FALSE ...## $ nox : num 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...## $ rm : num 6.58 6.42 7.18 7 7.15 ...## $ age : num 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...## $ dis : num 4.09 4.97 4.97 6.06 6.06 ...## $ rad : int 1 2 2 3 3 3 5 5 5 5 ...## $ tax : num 296 242 242 222 222 222 311 311 311 311 ...## $ ptratio: num 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...## $ black : num 397 397 393 395 397 ...## $ lstat : num 4.98 9.14 4.03 2.94 5.33 ...## $ medv : num 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...建设模子
建确立地丛林模子:
添加localImp = TRUE暗意需要诡计每个猜度变量对每个不雅测的猜度效力的孝敬。
set.seed(2017)forest <- randomForest(medv ~ ., data = Boston, localImp = TRUE)forest## ## Call:## randomForest(formula = medv ~ ., data = Boston, localImp = TRUE) ## Type of random forest: regression## Number of trees: 500## No. of variables tried at each split: 4## ## Mean of squared residuals: 9.793518## % Var explained: 88.4模子讲明
底下会重视先容这个R包的几个函数,通过从多个方靠近这个效力进行讲明。
最小深度分散在方案树或者立地丛林中,树的深度是一个膺惩的超参数,频繁一个特征(变量)的深度越小,证据这个特征越膺惩(也子虚足是这么哈)。
咱们不错诡计每个特征的深度分散,就不错大意了解这个特征的膺惩性。这个经由不错通过min_depth_distribution结束:
min_depth_frame <- min_depth_distribution(forest)head(min_depth_frame, n = 10)## tree variable minimal_depth## 1 1 age 3## 2 1 black 5## 3 1 chas 9## 4 1 crim 2## 5 1 dis 4## 6 1 indus 3## 7 1 lstat 1## 8 1 nox 4## 9 1 ptratio 2## 10 1 rad 5
这个效力不错径直画出来,使用plot_min_depth_distribution即可可视化每个特征的最小深度的分散以及它的平均值:
plot_min_depth_distribution(min_depth_frame)
图片
你径直把forest这个对象提供给plot_min_depth_distribution亦然不错的,然而使用min_depth_frame的平允是,如若你要绘图多个最小深度的图,不错幸免重迭诡计,这个诡计经由还挺费时间的.
在诡计平均最小深度时,plot_min_depth_distribution提供3种诡计措施:
mean_sample = "all_trees":莫得用于分袂的变量的最小深度等于树的平均深度mean_sample = "top_trees":这个是默许建树.只使用其中一部分树进行诡计mean_sample = "relevant_trees":忽略缺失值,只使用非缺失值诡计平均最小深度从上图来看dis这个变量的名次是高于indus的,因为平均深度小,然而从图中不错看出dis这个变量莫得在深度为0时使用过,是以也有可能indus的名次应该靠前.
如若某个数据有很多缺失值,咱们不错尝试使用mean_sample = "relevant_trees"来碰庆幸效力会不会不同(关于咱们这个数据效力不异)
plot_min_depth_distribution(min_depth_frame, mean_sample = "relevant_trees", k = 15)
图片
不错看到dis的名次仍是高于indus的.
在稽察这个最小深度分散图时,需要把平均值和分散空洞来看,不可只看平局值.
变量膺惩性径直诡计变量膺惩性,这个经由也比较慢,然而会同期诡计多种掂量变量膺惩性的缱绻:
importance_frame <- measure_importance(forest)importance_frame## variable mean_min_depth no_of_nodes mse_increase node_purity_increase## 1 age 3.21800 9070 4.2510362 1126.8328## 2 black 3.51400 8015 1.7101238 779.6626## 3 chas 6.45162 736 0.7706690 223.7377## 4 crim 2.55400 9388 8.2946300 2245.7347## 5 dis 2.54200 9210 7.3374224 2458.3168## 6 indus 3.43000 4239 5.6495909 2372.2088## 7 lstat 1.28600 11129 63.2892439 12394.3668## 8 nox 2.45400 6248 10.4210162 2814.5932## 9 ptratio 2.58800 4595 7.3896667 2665.5869## 10 rad 4.99746 2666 1.4400123 357.2610## 11 rm 1.42600 11514 33.9459827 12558.5167## 12 tax 3.31400 4420 4.8688001 1519.1153## 13 zn 5.85152 1633 0.7628575 332.5409## no_of_trees times_a_root p_value## 1 500 2 4.469233e-242## 2 500 1 7.699206e-95## 3 403 0 1.000000e+00## 4 500 20 1.774755e-298## 5 500 1 3.014263e-266## 6 500 63 1.000000e+00## 7 500 132 0.000000e+00## 8 500 40 9.508719e-01## 9 500 56 1.000000e+00## 10 499 3 1.000000e+00## 11 500 143 0.000000e+00## 12 500 33 1.000000e+00## 13 488 6 1.000000e+00
第一列是变量名字,背面是变量膺惩性的掂量缱绻,关于转头和分类显现的变量膺惩性是不不异的,咱们这里是转头:
mean_min_depth:平均最小深度no_of_nodes:使用该变量进行分袂的总的节点的个数mse_increase:变量端正被打乱后,均方差错的平局增多量node_purity_increase:使用某个变量分袂后,节点纯度的增多量,通过宽泛和的减少来掂量no_of_trees:使用该变量进行分袂的总的树的个数times_a_root:使用该变量看成根节点进行分袂的树的个数p_value:单侧二项分散老练的p值如若是分类问题,会显现以下几列:
accuracy_decrease:当变量端正被打乱后,平均猜度准确率下落了若干gini_decrease:使用某个变量分袂后,基尼整个的平均减少许不错看到效力中亦然有mean_min_depth的,是以measure_importance也允许你使用不同的措施诡计这个效力.
不错结束多个膺惩性缱绻可视化,即是同期可视化两个变量膺惩性缱绻.
比如同期展示mean_min_depth和times_a_root两个缱绻,同期把点的大小映射给no_of_nodes,其实是相配于展示了3个缱绻:
plot_multi_way_importance(importance_frame, size_measure = "no_of_nodes")
图片
也不错通过x_measure/y_measure指定不同的缱绻:
plot_multi_way_importance(importance_frame, x_measure = "mse_increase", y_measure = "node_purity_increase", size_measure = "p_value", no_of_labels = 5)## Warning: Using alpha for a discrete variable is not advised.
图片
还不错径直借助ggpairs比较多个变量膺惩性缱绻的干系,其实即是诡计磋商整个并进行可视化:
plot_importance_ggpairs(importance_frame)
图片
由于是借助了GGally包中的ggpairs这个函数,是以不错更始图形的分散步地,就不错用来展示不同缱绻的名次:
plot_importance_rankings(importance_frame)
图片
交互作用讲明在证据变量膺惩性缱绻采选好咱们的变量之后,还不错探索下它们之间的交互作用。
比如咱们先证据mean_min_depth和no_of_trees采选前5个最膺惩的变量:
(vars <- important_variables(importance_frame, k = 5, measures = c("mean_min_depth", "no_of_trees")))## [1] "lstat" "rm" "nox" "dis" "crim"
然后探索交互作用(很慢):
interactions_frame <- min_depth_interactions(forest, vars)head(interactions_frame[order(interactions_frame$occurrences, decreasing = TRUE), ])## variable root_variable mean_min_depth occurrences interaction## 33 lstat lstat 1.279749 479 lstat:lstat## 8 black lstat 2.464367 477 lstat:black## 53 rm lstat 1.431866 475 lstat:rm## 3 age lstat 2.178071 473 lstat:age## 18 crim lstat 1.848217 473 lstat:crim## 23 dis lstat 1.735482 473 lstat:dis## uncond_mean_min_depth## 33 1.286## 8 3.514## 53 1.426## 3 3.218## 18 2.554## 23 2.542
这个效力给出了每个变量和其他变量交互作用的最小深度等信息,occurrences是交互作用出现的次数。
效力可视化:
plot_min_depth_interactions(interactions_frame)
图片
这个效力横坐标是变量间的交互作用,是按照交互作用出现次数递减排序的,最前边的是lstat:lstat,软件开发资讯同期它的mean_min_depth亦然最小的。
上期前区三区比为3:2:0,第1、2区表现活跃,最近10期前区三区比为20:16:14,第3区出号较冷。
奇偶比分析:近十期奇偶比为26:24,奇数码出现概率较热。本期看好奇数号码出现概率走高,参考奇偶比4:1。
底下咱们采选lstat:rm(你采选我方需要的)络续探索这个交互作用对猜度效力的影响:
plot_predict_interaction(forest, Boston, "rm", "lstat")
图片
从图中不错看出,rm越大,lstat越小,房价越高。
生成评释用一排代码不错生成一个重视的模子讲明评释软件开发公司,内部包含整个用率,还有一些讲明,格外肤浅:
explain_forest(forest, interactions = TRUE, data = Boston)本站仅提供存储办事,整个本色均由用户发布,如发现存害或侵权本色,请点击举报。