Permutation Importance重要性

目录

  • <font color=blue size=4 face="楷体">算法解构
  • <font color=blue size=4 face="楷体">代码

算法解构

Permutation Importance适用于表格型数据,其对于特征重要性的评判取决于该特征被随机重排后,模型表现评分的下降程度。其数学表达式可以表示为:

  • 输入:训练后的模型m,训练集(或验证集,或测试集)D
  • 模型m在数据集D上的性能评分s
  • 对于数据集D的每一个特征j
    • 对于K次重复实验中的每一次迭代k,随机重排列特征j,构造一个被污染的数据集 D c k , j D c_{k, j} Dck,j
    • 计算模型m在数据集 D c k , j D c_{k, j} Dck,j上的性能评分 s k , j s_{k, j} sk,j
    • 特征j的重要性分数 i j i_{j} ij则可以记作 i j = s − 1 / K ∑ k = 1 K s k , j i_j=s-1 / K \sum_{k=1}^K s_{k, j} ij=s1/Kk=1Ksk,j

L. Breiman, “Random Forests”, Machine Learning, 45(1), 5-32, 2001.

代码

from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
diabetes = load_diabetes()
X_train, X_val, y_train, y_val = train_test_split(diabetes.data, diabetes.target, random_state=0)model = Ridge(alpha=1e-2).fit(X_train, y_train)
model.score(X_val, y_val)scoring = ['r2', 'neg_mean_absolute_percentage_error', 'neg_mean_squared_error']
# scoring参数可以同时加入多个计算指标,这样比重复使用permutation_importance更有效率,因为预测值能被用来计算不同的指标
r_multi = permutation_importance(model, X_val, y_val, n_repeats=30, random_state=0, scoring=scoring)for metric in r_multi:print(f"{metric}")r = r_multi[metric]for i in r.importances_mean.argsort()[::-1]:if r.importances_mean[i] - 2 * r.importances_std[i] > 0:print(f"    {diabetes.feature_names[i]:<8}"f"{r.importances_mean[i]:.3f}"f" +/- {r.importances_std[i]:.3f}")

输出为:

r2s5      0.204 +/- 0.050bmi     0.176 +/- 0.048bp      0.088 +/- 0.033sex     0.056 +/- 0.023
neg_mean_absolute_percentage_errors5      0.081 +/- 0.020bmi     0.064 +/- 0.015bp      0.029 +/- 0.010
neg_mean_squared_errors5      1013.903 +/- 246.460bmi     872.694 +/- 240.296bp      438.681 +/- 163.025sex     277.382 +/- 115.126

相比而言,树模型通常基于不纯净度的下降来判断特征重要性,该重要性通常是基于训练集的,当模型过拟合时,特征的重要性则具有误导性。在此情况下,看似重要的特征可能对于模型上线后的遇到的新数据并没有令人满意的预测能力。

同时,基于不纯净度的特征重要性容易受到高数量类别属性的影响(High Cardinality Features),所以那些数值型变量往往排名靠前。而Permutation Importance 对模型的特征没有偏见,也不局限于特定的模型类别,适用性较广。请注意。如果特征有较强的多重共线性,建议只取一个重要的特征,方法可查看官方示例。

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

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

相关文章

免费API-JSONPlaceholder使用手册

官方使用指南快速索引>>点这里 快速导览&#xff1a; 什么是JSONPlaceholder?有啥用?如何使用JSONPlaceholder? 关于“增”关于“改”关于“查”关于“删”关于“分页查”关于“根据ID查多个” 尝试自己搭一个&#xff1f;扩展的可能&#xff1f; 什么是JSONPlaceho…

面向对象(高级)知识点强势总结!!!

文章目录 一、知识点复习1-关键字&#xff1a;static1、知识点2、重点 2-单例模式&#xff08;或单子模式&#xff09;1、知识点2、重点 3-理解main()方法1、知识点2、重点 4-类的成员之四&#xff1a;代码块1、知识点2、重点 5-关键字&#xff1a;final1、知识点2、重点 6-关键…

新建虚拟环境并与Jupyter内核连接

第一步:在cmd里新建虚拟环境,shap38是新建的虚拟环境的名字 ,python=3.x conda create -n shap38 python=3.8第二步,安装ipykernel,打开anconda powershell prompt: 虚拟环境的文件夹位置,我的如图所示: 进入文件夹并复制地址: 输入复制的文件夹地址更改文件夹:…

单挑力扣(LeetCode)SQL题:534. 游戏玩法分析 III(难度:中等)

题目&#xff1a;534. 游戏玩法分析 III &#xff08;通过次数23,825 | 提交次数34,947&#xff0c;通过率68.17%&#xff09; Table:Activity----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int…

交换域系数的选择:图像处理与编码的关键策略

在图像处理和编码领域&#xff0c;选择适当的交换域系数对于实现高效的图像处理和编码至关重要。交换域系数是指在特定的数学变换下产生的频域系数。通过选择合适的交换域系数&#xff0c;可以实现图像的压缩、增强和重构。本文将深入探讨交换域系数的选择在图像处理和编码中的…

你好!Apache Seata

北京时间 2023 年 10 月 29 日&#xff0c;分布式事务开源项目 Seata 正式通过 Apache 基金会的投票决议&#xff0c;以全票通过的优秀表现正式成为 Apache 孵化器项目&#xff01; 根据 Apache 基金会邮件列表显示&#xff0c;在包含 13 个约束性投票 (binding votes) 和 6 个…

Qt学习:Qt的意义安装Qt

Qt 的简介 QT 是一个跨平台的 C图形用户界面应用程序框架。它为程序开发者提供图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正地组件编程。 支持平台 xP 、 Vista、Win7、win8、win2008、win10Windows . Unix/Linux: Ubuntu 等…

【ARMv8M Cortex-M33 系列 2.1 -- Cortex-M33 使用 .hex 文件介绍】

文章目录 HEX 文件介绍英特尔十六进制文件格式记录类型hex 示例Cortex-M 系列hex 文件的使用 HEX 文件介绍 .hex 文件通常用于微控制器编程&#xff0c;包括 ARM Cortex-M 系列微控制器。这种文件格式是一种文本记录&#xff0c;用于在编程时传递二进制信息。.hex 文件格式最常…

docker学习笔记02-安装mysql

1.安装mysql8 下载MySQL镜像 docker pull mysql:8.0创建并启动容器 docker run -itd --name mysqltest -p 9999:3306 -e MYSQL_ROOT_PASSWORD123456 mysql其中-it是交互界面 -d是后台执行 -name 指定容器名称 -p指定映射端口 -e设置环境变量 最后mysql是镜像名或者用镜像id如…

Flask 日志

flask 日志 代码源码源自编程浪子flask点餐小程序代码 记录用户访问日志 和 错误日志 这段代码是一个基于Flask框架的日志服务类&#xff0c;用于 记录用户访问日志 和 错误日志。代码中定义了一个名为LogService的类&#xff0c;其中包含了两个静态方法&#xff1a;addAcc…

QT C++ TCP Socket 请求心知天气

0.0 相关连接代码部分头文件具体实现 相关连接 心知天气官方天气图标 心知天气官网 代码部分 头文件 #include <QtNetwork> #include <QNetworkAccessManager> #include <QDebug> #include <QJsonValue> #include <QJsonArray> #include &l…

单挑力扣(LeetCode)SQL题:1285. 找到连续区间的开始和结束数字(难度:中等)

给题目&#xff1a;1285. 找到连续区间的开始和结束数字 &#xff08;通过次数8,111 | 提交次数9,900&#xff0c;通过率81.93%&#xff09; 表&#xff1a;Logs ------------------------ | Column Name | Type | ------------------------ | log_id | int …

XUbuntu22.04之删除多余虚拟网卡和虚拟网桥(二百零四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

在 docker 中安装 GLEE

1、安装 detectron2。 2、git clone GLEE。 git clone https://github.com/FoundationVision/GLEE.git docker 中没有 git&#xff0c;可以通过共享主机文件夹&#xff0c;在主机中做 git clone。 3、删除 GLEE/app/requirements.txt 中的 torch 和 torchvision&#xff0c…

用Xshell连接虚拟机的Ubuntu20.04系统记录。虚拟机Ubuntu无法上网。本机能ping通虚拟机,反之不能。互ping不通

先别急着操作&#xff0c;看完再试。 如果是&#xff1a;本机能ping通虚拟机&#xff0c;反之不能。慢慢看到第8条。 如果是&#xff1a;虚拟机不能上网&#xff08;互ping不通&#xff09;&#xff0c;往下一直看。 系统是刚装的&#xff0c;安装步骤&#xff1a;VMware虚拟机…

【Linux】 last 命令使用

last 命令 用于检索和展示系统中用户的登录信息。它从/var/log/wtmp文件中读取记录&#xff0c;并将登录信息按时间顺序列出。 著者 Miquel van Smoorenburg 语法 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...]last 命令 -Linux手册页 选项及作用…

vue项目表单使用正则过滤ip、手机号

import useFormValidate from /hooks/useFormValidatesetup(props, { emit }) {const { validateName, validateIPAndPort } useFormValidate()const state reactive({workFaceInfo: props.info?.id ? props.info : {},sysTypeData: props.sysType,formRules: {name: [{req…

SpringBoot 在IDEA中实现热部署 (JRebel实用版)

JRebel简介&#xff1a; JRebel是与应用程序服务器集成的JVM Java代理&#xff0c;可使用现有的类加载器重新加载类。只有更改的类会重新编译并立即重新加载到正在运行的应用程序中&#xff0c;JRebel特别不依赖任何IDE或开发工具&#xff08;除编译器外&#xff09;。但是&am…

『Linux升级路』冯诺依曼体系结构与操作系统

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、冯诺依曼体系结构 &#x1f4d2;1.1为什么要有体系结构 &#x1f4d2;1.2…

虚函数的讲解

文章目录 虚函数的声明与定义代码演示基类Person派生类Man派生类Woman 测试代码动态绑定静态绑定访问私有虚函数总结一下通过成员函数指针调用函数的方式 虚函数的声明与定义 虚函数存在于C的类、结构体等中&#xff0c;不能存在于全局函数中&#xff0c;只能作为成员函数存在…