你的位置:制服诱惑 > 91porn app > >撸二哥 R话语fastshap
热点资讯
91porn app

撸二哥 R话语fastshap

发布日期:2025-06-28 15:19    点击次数:128

撸二哥 R话语fastshap

图片

图片

图片

图片

图片

图片

图片

图片

SHAP(SHapley Additive exPlanations)是一种模子无关的讲授关节,因此它适用于任何模子。前边还是先容过屡次这个SHAP了撸二哥,在R话语中结束SHAP也瑕瑜常简易的。

R话语SHAP模子讲授R话语shapviz结束SHAP可视化R话语SHAP模子讲授之kernelshap

fastshap基于Rcpp和foreach,是以它的速率高出快(比之前先容的几种王人快),何况fastshap既不错结束局部讲授,又能结束全局讲授,还不错无缝对接shapviz的可视化。

装配
# Install the latest stable version from CRAN:install.packages("fastshap")# Install the latest development version from GitHub:if (!requireNamespace("remotes")) {  install.packages("remotes")}remotes::install_github("bgreenwell/fastshap")
准备数据和R包

咱们使用经过缺失值插补的泰坦尼克号数据集t1,该数据有1309行,6列,其中survived是恶果变量,二分类,1代表亏损,2代表存活。

library(fastshap)t1 <- titanic_mice[[1L]]dim(t1)## [1] 1309    6str(t1)## 'data.frame':    1309 obs. of  6 variables:##  $ survived: Factor w/ 2 levels "no","yes": 2 2 1 1 1 2 2 1 2 1 ...##  $ pclass  : int  1 1 1 1 1 1 1 1 1 1 ...##  $ age     : num  29 0.92 2 30 25 48 63 39 53 71 ...##  $ sex     : Factor w/ 2 levels "female","male": 1 2 1 2 1 2 1 2 1 2 ...##  $ sibsp   : int  0 1 1 1 1 0 1 0 2 0 ...##  $ parch   : int  0 2 2 2 2 0 0 0 0 0 ...

把pclass变为有律例的因子型:

t1$pclass <- as.ordered(t1$pclass)  # makes more sense as an ordered factor

本次使用ranger树立迅速丛林模子,对于其他模子,fastshap王人是支持的。

library(ranger)set.seed(2053)  # for reproducibility(rfo <- ranger(survived ~ ., data = t1, probability = TRUE))## Ranger result## ## Call:##  ranger(survived ~ ., data = t1, probability = TRUE) ## ## Type:                             Probability estimation ## Number of trees:                  500 ## Sample size:                      1309 ## Number of independent variables:  5 ## Mtry:                             2 ## Target node size:                 10 ## Variable importance mode:         none ## Splitrule:                        gini ## OOB prediction error (Brier s.):  0.1337358
局部讲授

为了讲明怎么最简易地使用Shapley值来量化特征孝顺,咱们需要一个新的不雅测值来预计。底下咱们将为新建一个不雅测值,给这个不雅测取个名字叫jack.dawson:

jack.dawson <- data.frame(  #survived = 0L,  # in case you haven't seen the movie  pclass = 3L,     # third-class passenger  age = 20.0,      # twenty years old  sex = factor("male", levels = c("female", "male")),  # male  sibsp = 0L,      # no siblings/spouses aboard  parch = 0L       # no parents/children aboard)

使用fastshap进行模子讲授和DALEX相通,率先亦然需要树立一个讲授器,用来剖释模子和数据的多样信息。

在DALEX中,预计函数默许会从模子对象中索要(默许使用predict()),然则在fastshap中需要咱们自界说预计函数,用于成功复返数值(归来任务)粗略类别概率(分类任务)。

# 自界说预计函数pfun <- function(object, newdata) {  # prediction wrapper  unname(predict(object, data = newdata)$predictions[, "yes"])}# 筹谋Jack's的活命概率(jack.prob <- pfun(rfo, newdata = jack.dawson))## [1] 0.1314723

如若成功使用以下代码得到的并不是类别概率:

predict(rfo, jack.dawson)## Ranger prediction## ## Type:                             Probability estimation ## Sample size:                      1 ## Number of independent variables:  5

用这个函数不错得到通盘t1不雅测的平均活命概率:

# 筹谋通盘东谈主的平均活命概率(baseline <- mean(pfun(rfo, newdata = t1)))  ## [1] 0.3821045
# Difference between Jack and average(difference <- jack.prob - baseline)## [1] -0.2506322

不错发现Jack的活命可能性低于平均值。底下咱们就使用SHAP来讲授为什么会这么。

底下就不错树立讲授器了,和DALEX相通,亦然使用explain()函数,亦然需要提供只含预计变量的数据框:

X <- subset(t1, select = -survived)  # 只含预计变量set.seed(2113)# 树立讲授器(ex.jack <- explain(rfo, X = X, pred_wrapper = pfun, newdata = jack.dawson))##      pclass          age sex      sibsp parch## [1,]      0 -0.005012306   0 0.02174902     0## attr(,"baseline")## [1] 0## attr(,"class")## [1] "explain" "matrix"  "array"

fastshap包使用高效版块的蒙特卡洛(Monte-Carlo,MC)算法。因此,为了融会性和准确性,应屡次筹谋特征孝顺,并将恶果取平均值。为此,只需将nsim参数树立为一个比拟大的值即可(默许是1)。底下咱们筹谋Jack的1000个基于Shapley的特征孝顺,并获得平均恶果:

set.seed(2129)  (ex.jack <- explain(rfo, X = X, pred_wrapper = pfun, newdata = jack.dawson,                    nsim = 1000))##           pclass         age        sex       sibsp       parch## [1,] -0.07554003 -0.01240914 -0.1414107 0.001836116 -0.01103988## attr(,"baseline")## [1] 0## attr(,"class")## [1] "explain" "matrix"  "array"

fastshap使用的MC关节筹谋的Shapley值的加和不会就是相应预计和基线(即平均预计值)之间的差值。然则借用Python的shap库的手段,咱们不错使用基于归来的调养来立异总额。为此,只需在调用explain()中树立为adjust = TRUE:

set.seed(2133)  (ex.jack.adj <- explain(rfo, X = X, pred_wrapper = pfun, newdata = jack.dawson,                        nsim = 1000, adjust = TRUE))##          pclass         age        sex       sibsp       parch## [1,] -0.0697378 -0.02354202 -0.1485205 0.003980237 -0.01281207## attr(,"baseline")## [1] 0.3821045## attr(,"class")## [1] "explain" "matrix"  "array"

这个恶果的加和与difference是不相通的:

sum(ex.jack.adj)  # 和jack.prob - baseline的恶果不相通哦## [1] -0.2506322

构建好讲授器之后,就不错使用shapviz包进行可视化了。

咱们先创建一个简易的瀑布图来可视化这几个特征是怎么让Jack的预计活命概率较低的:

library(shapviz)shv <- shapviz(ex.jack.adj, X = jack.dawson, baseline = baseline)sv_waterfall(shv)

图片

显然,Jack是又名男性三等舱乘客,这两个变量对他的较低活命概率孝顺最大。

然后是瀑布图的另一种体式:

sv_force(shv)

图片

从图形一语气方面来看,这个图诚然和瀑布图抒发的理由完全相通,然则不如瀑布图读起来简易。

全局讲授

SHAP除了用于局部讲授外,还不错用于全局讲授。

如若对数据聚会通盘的不雅测王人进行一遍SHAP讲授,然后团员它们的恶果,就不错得到全局的SHAP讲授。这个关节和CP团员成为PDP的关节高出访佛。

底下的代码使用1000次MC重迭筹谋考试数据中每个乘客的Shapley讲授,并将生成的矩阵强制调养为tibble(以便更好地打印)。树立shap_only=FALSE不错简易shapviz使用。

这个进程很慢哈~

set.seed(2224)  ex.t1 <- explain(rfo, X = X, pred_wrapper = pfun, nsim = 100, adjust = TRUE,                 shap_only = FALSE)tibble::as_tibble(ex.t1$shapley_values)## # A tibble: 1,309 × 5##    pclass      age     sex     sibsp    parch##     <dbl>    <dbl>   <dbl>     <dbl>    <dbl>##  1  0.228  0.00994  0.312   0.0208   -0.00916##  2  0.138  0.331   -0.0717  0.0113    0.0712 ##  3  0.156  0.0213   0.116  -0.0240   -0.0189 ##  4  0.212 -0.0212  -0.183   0.0171    0.00782##  5  0.201 -0.0308   0.282  -0.0149   -0.0369 ##  6  0.168 -0.0393  -0.199  -0.000779 -0.00240##  7  0.177 -0.127    0.346  -0.00829   0.00371##  8  0.153 -0.0644  -0.186  -0.00392  -0.00976##  9  0.234  0.00345  0.296   0.0398    0.00432## 10  0.106 -0.115   -0.212   0.000223 -0.00402## # ℹ 1,299 more rows

可视化全局变量伏击性(把稳和基于重排的变量伏击性永诀),这个其实是各个变量的多个Shapley值完全值的平均值:

shv.global <- shapviz(ex.t1)sv_importance(shv)  

图片

变量伏击性图的另一种进展体式,蜂窝图,在Python中被称为shap summary plot:

sv_importance(shv.global, kind = "beeswarm")

图片

变量依赖图,访佛于部分依赖图。在这里,咱们将望望特征孝顺age对其输入值的依赖性:

sv_dependence(shv.global, v = "age")

图片

其他可视化函数可参考对于shapviz的推文:R话语shapviz可视化SHAP

男同sex

如若你的数据量很大,fastshap还支持使用并行化,借助doParallel包即可结束撸二哥,全球我方尝试下即可。

本站仅提供存储工作,通盘本色均由用户发布,如发现存害或侵权本色,请点击举报。

上一篇:探花 眼睛妹 2023年中国机床器具产业发展出息分析:数控机床竞争力陆续走高,出口领域陆续彭胀[图]
下一篇:萝莉 后入 养眼又刺激,这大措施台剧18岁以上才能看