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

news/2024/3/29 9:28:21/文章来源:https://blog.csdn.net/amyniez/article/details/129129526

Random Forest 解释模型

      • 1. 介绍
      • 2. 理解随机森林运行机理
        • 2.1导入需要的包
        • 2.2 构建随机森林模型
        • 2.3 RF特征重要性:
        • 2.4 特征对预测结果的影响
        • 2.5 交互作用
        • 2.6 替代模型(Decision tree surrogate model)
        • 2.7

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

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

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72055.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

儿童袖套上架美国亚马逊CPC认证

袖套&#xff0c;也称套袖。是戴在袖管外的套子&#xff0c;旨在保护衣服的袖管。通常戴时松垂于另外一只衣袖外面的袖子。美国CPC认证简介&#xff1a;CPC认证是Children’s Product Certificate的英文简称&#xff0c;CPC证书就类似于国内的质检报告&#xff0c;在通过相关检…

内网渗透(四十五)之横向移动篇-WinRM远程执行命令横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

PrivateLoader PPI服务发现RisePro恶意软件窃取分发信息

称为PrivateLoader的按安装付费&#xff08;PPI&#xff09;软件下载器服务正用于恶意软件RisePro的信息窃取。Flashpoint 于 2022 年 12月13日发现了新的窃取者&#xff0c;此前发现了在名为Russian Market的非法网络犯罪市场上使用该恶意软件泄露的“几组日志”。RisePro是一…

IDEA高效插件和设置

安装好Intellij idea之后&#xff0c;进行如下的初始化操作&#xff0c;工作效率提升十倍。 一. 安装插件 1. Codota 代码智能提示插件 只要打出首字母就能联想出一整条语句&#xff0c;这也太智能了&#xff0c;还显示了每条语句使用频率。 原因是它学习了我的项目代码&…

墨菲安全参与信息通信软件供应链安全社区成员大会并获自主研发创新成果奖

2023年2月16日&#xff0c;首届ICT软件供应链安全治理论坛暨信息通信软件供应链安全社区第二届成员大会在北京成功举办&#xff0c;多位业界顶级专家与工业和信息化部网络安全管理局相关领导出席&#xff0c;为现场观众分享了关于软件供应链可持续性与安全治理行业的前瞻与思考…

Apache Shiro与Spring Security对比

Apache Shiro VS Spring Security 1.Spring Security 官方文档&#xff1a;https://spring.io/projects/spring-security#overview介绍&#xff1a; Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spr…

CAS底层原理及ABA问题

一、案例CAS是Java中Unsafe类里面的一个方法&#xff0c;它的全称是叫CompareAndSwap比较并交换的一个意思&#xff0c;它的主要功能是能够去保证在多线程的环境下对于共享变量修改的一个原子性。例如&#xff0c;比如说像这样一个场景&#xff0c;有一个成员变量state&#xf…

【分享】订阅卖家云集简云连接器同步销售出库数据至卖家云系统

方案场景 在企业进行数字化转型过程中&#xff0c;数据割裂是企业面临的最大困难&#xff0c;钉钉作为现企业流行的常用办公系统&#xff0c;与第三方ERP系统之间存在着数据割裂的现象&#xff0c;例如&#xff0c;钉钉与卖家云系统&#xff0c;企业员工原来的办公方式是在钉钉…

Vue基础14之TodoList组件自定义事件、全局事件总线、TodoList全局事件总线

Vue基础14TodoList-组件自定义事件先改Header和Footer子组件&#xff0c;List先不考虑App.vueMyHeader.vueMyFooter.vue全局事件总线实现思路正规写法main.jsApp.vueStudent.vueSchool.vue总结&#xff1a;全局事件总线&#xff08;GlobalEventBus&#xff09;TodoList案例&…

修复 K8s SSL/TLS 漏洞(CVE-2016-2183)指南

作者&#xff1a;老 Z&#xff0c;中电信数智科技有限公司山东分公司运维架构师&#xff0c;云原生爱好者&#xff0c;目前专注于云原生运维&#xff0c;云原生领域技术栈涉及 Kubernetes、KubeSphere、DevOps、OpenStack、Ansible 等。 前言 测试服务器配置 主机名IPCPU内存系…

5.10 BGP属性-MED

5.4.4配置BGP MED属性控制选路 1. 实验目的 熟悉BGP MED属性控制选路的应用场景掌握BGP MED属性控制选路的配置方法2. 实验拓扑 实验拓扑如图5-10所示: 图5-10:配置BGP MED属性控制选路 3. 实验步骤 (1) 网络连通性 R1…

QMap 判断是否value是否已经存在,结合Sleep函数测试

网上查了资料&#xff0c;基本说的都是通过.value判断是否已经之前的key值&#xff0c;但是尝试.了一下发现有.key的函数&#xff0c;对比着来就感觉这个函数是用来判断是否已经存在value值&#xff0c;于是开始百度也几乎没有找到相关资料&#xff0c;只好自己看官方文档&…

【高速电路01】高速电路入门知识

1.什么是高速电路&#xff1f; 一般情况下&#xff0c;我们在讨论电路的特性时&#xff0c;一个基本的常识&#xff0c;是认为一条导线上各处的电压&#xff08;或者说信号&#xff09;在同一时刻是相等的。 以上结论在低速电路时是没问题的&#xff0c;但是&#xff0c;实际…

R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作技术应用第一章、理论篇以问题导入的方式&#xff0c;深入掌握原理基础什么是MaxEnt模型&#xff1f;MaxEnt模型的原理是什么&#xff1f;有哪些用途&#xff1f;MaxEnt运行需要哪些输入文件…

【异常】记一次因注解@RestController没加(@RestController不会用),导致无法调用Controller层的方法

一、背景 我想要调用一个Controller&#xff0c;定义的内容如下 RequestMapping("/demo") public class demoController {GetMapping("/doSomething")public JSONObject doSomething() {JSONObject json new JSONObject();json.set("title", …

界面控件DevExpress WPF Pivot Grid——拥有强大多维数据分析能力!

界面控件DevExpress WPF的Pivot Grid组件是一个类似excel的数据透视表&#xff0c;用于多维数据分析和跨选项卡报表生成。它拥有众多的布局自定义选项&#xff0c;允许开发者完全控制其UI且以用户为中心的功能使其易于部署。PS&#xff1a;DevExpress WPF拥有120个控件和库&…

双因素方差分析全流程

上篇文章讲述了“单因素方差分析全流程总结”&#xff0c;单因素方差分析只是考虑了一个自变量&#xff08;定类&#xff09;与一个因变量&#xff08;定量&#xff09;之间的关系&#xff0c;但是在实际问题研究中可能研究两个或者几个因素与因变量之间的关系&#xff0c;例如…

核心技术: springboot 启动类加载时方法执行的几种实现方式, bean声明周期, 启动执行顺序

目录 1. 业务场景 -> 1.1 初始化操作 -> 1.2 业务操作 -> 1.3优势 2. 实现方式(多种方式,不同思想) -> 2.1 定时调度任务(常用四种方式 task ) --> 2.1.1 Timer(单线程) --> 2.1.2 scheduledExecutorService(多线程并发执行,线程池) --> 2.1…

linux部署zookeeper

linux部署zookeeper 1、单机部署zk ZooKeeper服务器是用Java创建的&#xff0c;它需要在JVM上运行&#xff0c;所以需要使用JDK1.6及以上版本&#xff0c;一般都是jdk1.8。 选择自己安装本地的jdk&#xff0c;而不是centos自带的openjdk。 查看本地安装的jdk&#xff1a; j…

【C++的OpenCV】第二课-CMake创建OpenCV项目

文章目录一、CMake是什么&#xff1f;1.1 基本概念1.2 CMake的优势二、使用Cmake构建一个OpenCV程序2.1 步骤&#xff08;a&#xff09;编写一个简单的OpenCV示例代码&#xff08;b&#xff09;创建一个Cmake文件&#xff08;c&#xff09;生成可执行文件&#xff08;d&#xf…