Permutation Importance重要性

2023-12-28 19:28

本文主要是介绍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 对模型的特征没有偏见,也不局限于特定的模型类别,适用性较广。请注意。如果特征有较强的多重共线性,建议只取一个重要的特征,方法可查看官方示例。

这篇关于Permutation Importance重要性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/547025

相关文章

可测试,可维护,可移植:上位机软件分层设计的重要性

互联网中,软件工程师岗位会分前端工程师,后端工程师。这是由于互联网软件规模庞大,从业人员众多。前后端分别根据各自需求发展不一样的技术栈。那么上位机软件呢?它规模小,通常一个人就能开发一个项目。它还有必要分前后端吗? 有必要。本文从三个方面论述。分别是可测试,可维护,可移植。 可测试 软件黑盒测试更普遍,但很难覆盖所有应用场景。于是有了接口测试、模块化测试以及单元测试。都是通过降低测试对象

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

DTO类实现Serializable接口的重要性

所谓序列化,简单一点理解,就是将对象转换成字节数组,反序列化是将字节数组恢复为对象。凡是要在网络上传输的对象、要写入文件的对象、要保存到数据库中的对象都要进行序列化。Java对象是无法直接保存到文件中,或是存入数据库中的。如果要保存到文件中,或是存入数据库中,就要将对象序列化,即转换为字节数组才能保存到文件中或是数据库中。文件或者数据库中的字节数组拿出来之后要转换为对象才能被我们识别,即反序列化。

HDU2523(论scanf的重要性)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2523 解题思路: 先把a数组排个序,然后把| xi - xj |的所有组合值求出来,把b数组在排个序。这时候要考虑出现1、1、1、2、2、3这种相邻两个一样的情况,开一个vis标记数组把相邻的数进行合并,这样就可以顺利取到第k大的值。 特别说明,论scanf和printf的重要性,用cin

论互联网安全的重要性

论互联网安全的重要性 当今,计算机领域什么最火?当属人工智能了,纵观各大IT巨头google,facebook,apple,Baidu都有自己的人工智能实验室,google有谷歌大脑,其主要计划是研究当今最顶级的技术,比如无人驾驶汽车,google眼镜,百度成立IDL深度研究院等等。这是不是代表,未来我们的生活将因人工智能的发展而发生巨大变化?我想是的。人工智能要基于海量数据处理,这些数据包含大

高精度治具加工的重要性和创新性

在现代制造业中,高精度治具加工扮演着至关重要的角色。它不仅是生产过程中的关键环节,更是推动行业不断创新和发展的重要力量。时利和将解析高精度治具加工的重要性和创新性。   一、高精度治具加工的重要性   1.确保产品质量   高精度治具能够为生产过程提供准确的定位、夹紧和导向功能,从而确保产品的尺寸精度、形状精度和表面质量。例如,在电子制造领域,高精度的治具可以保证芯片的精确安装,提高电子

【ZOJ】3874 Permutation Graph 【FFT+CDQ分治】

传送门:【ZOJ】3874 Permutation Graph 题目分析: 容易知道一个个连通块内部的标号都是连续的,否则一定会有另一个连通块向这个连通块建边,或者这个连通块向另一个连通块建边。而且从左到右左边的连通块内最大的标号小于右边连通块内最小的标号。 然后我们可以构造dp方程: dp[n]=n!−i!∗dp[n−i] \qquad \qquad dp[n] = n! - i! *

软件兼容性测试重要性,第三方软件测试服务公司的测试流程

在当今的软件开发及使用环境中,软件兼容性测试作为一个关键的环节,越来越受到重视。随着各种操作系统、硬件与软件环境的多样化,如何确保软件的兼容性,成为我们需要深入探讨的重要话题。卓码软件测评,作为专业的第三方软件测试服务公司,深知其中的重要性,并在这一领域提供了全面的解决方案。 一、什么是软件兼容性测试?   软件兼容性测试是指在不同的操作系统、浏览器、设备和网络环境中,对软件进行测试,确保其能够

LeetCode 31 Next Permutation

题意: 给出一串数字,求该排列的下一个排列。如果该排列为字典序最大排列,则输出字典序最小排列。 思路: 首先C++里面有求下一个排列的函数next_permutation,该函数返回0即表示当前排列字典序最大。 如果要自己动手实现,那么就考虑“如何找到比当前排列大1的排列”。 假设排列A(aaaXddd)比排列B(aaaYfff)大1,a部分为两排列相同部分,X与Y表示最靠左边不同

String Permutation

Given two strings, write a method to decide if one is a permutation of the other. Example Example 1:Input: "abcd", "bcad"Output: TrueExample 2:Input: "aac", "abc"Output: False 思路:count比较一下就可以;