推荐这款机器学习的特征筛选神器!

大家好,特征选择是机器学习建模流程中最重要的步骤之一,特征选择的好坏直接决定着模型效果的上限,好的特征组合甚至比模型算法更重要。除了模型效果外,特征选择还有以下几点好处:

  • 提高模型性能并降低复杂性(维数爆炸)

  • 减少训练时间

  • 由于无信息和冗余特征而降低了过度拟合的风险

  • 简化的部署流程和实时数据管道,这是一个经常被低估的优势

本次给大家介绍一个小众的、可完全自动化的特征选择工具:AutoFeatSelect,使用它可以让繁琐的筛选过程变得非常轻松。

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

本文由粉丝群小伙伴总结与分享,如果你也想学习交流,资料获取,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:dkl88194,备注:来自CSDN + 加群
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

AutoFeatSelect介绍

AutoFeatSelect可以自动执行各种特征筛选步骤,比如计算相关性、消除高度相关的特征以及应用多种特征选择方法,并生成对应的筛选结果。该库自动化并简化了以下特征选择方法的实现:

  • 数值型特征、分类型特征的相关性分析

  • 使用 LightGBM、XGBoost、随机森林进行特征重要性分析

  • LassoCV 系数分析

  • permutation排列重要性

  • 通过交叉验证进行递归特征消除

  • Boruta

GitHub连接:https://github.com/dorukcanga/AutoFeatSelect

实战案例

下面我们直接通过一个实战案例来说明如何使用autofeatselect

首先pip安装包,然后导入。

pip install autofeatselect
import pandas as pd
import numpy as npfrom autofeatselect import CorrelationCalculator, FeatureSelector, AutoFeatureSelect

01 数据准备

数据:https://www.kaggle.com/competitions/porto-seguro-safe-driver-prediction/data

# 准备数据
df = pd.read_csv("train.csv")
df.drop('id', axis=1, inplace=True)# 设置数字和分类特征以进行进一步分析
response = 'target'
cat_feats = [c for c in df.columns if '_cat' in c]
bin_feats = [c for c in df.columns if '_bin' in c]
cat_feats = cat_feats + bin_feats
num_feats = [c for c in df.columns if c not in cat_feats+[response]]df[num_feats] = df[num_feats].astype('float')
df[cat_feats] = df[cat_feats].astype('object')df.replace(-1, np.nan, inplace=True)# 切分训练和测试集
X_train, X_test, y_train, y_test = train_test_split(df[num_feats+cat_feats],df[response],test_size=0.2,random_state=42)

autofeatselect有两种使用方法。

第一种是属于半自动的特征筛选,分步式地控制筛选方法和顺序。第二种是全自动化特征筛选,直接通过一个api函数配置参数即可完成整个筛选过程。

02 方法一:半自动方法

考虑到相关特征会对特征重要性和选择结果产生负面影响,因此必须首先删除高度相关的特征。可以使用CorrelationCalculator类的numeric_correlationscategorical_correlations方法检测。

# 静态特征即使与其他特征相关也不会被删除
static_features = ['ps_ind_01', 'ps_ind_03','ps_ind_14']# 检测相关特征
corr_df_num, num_remove_list = CorrelationCalculator.numeric_correlations(X_train,features=num_feats,static_features=static_features,threshold=0.9)corr_df_cat, cat_remove_list = CorrelationCalculator.categorical_correlations(X_train,features=cat_feats,static_features=None,threshold=0.9)#Remove correlated features
num_feats = [c for c in num_feats if c not in num_remove_list]
cat_feats = [c for c in cat_feats if c not in cat_remove_list]

从初始特征集中删除相关特征后,然后再使用FeatureSelector类计算 LightGBM 特征重要性分数:

# 创建特征选择器对象
feat_selector = FeatureSelector(modeling_type='classification',X_train=X_train, y_train=y_train,X_test=X_test, y_test=y_test,numeric_columns=num_feats,categorical_columns=cat_feats,seed=24)# 超参数和目标函数LightGBM 的值是可以改变的
lgbm_importance_df = feat_selector.lgbm_importance(hyperparam_dict=None,objective=None,return_plot=True)

生成的特征重要性图:

图片

当然,这里方法不唯一,也可以通过feat_selector来使用更多的选择方法。特征重要性筛选后再来应用递归特征消除

# 用LightGBM作为估计器的RFECV特征排名
# LightGBM 和 RFECV 的 yper 参数都可以更改
rfecv_importance_df = feat_selector.rfecv_importance(lgbm_hyperparams=None,rfecv_hyperparams=None,return_plot=False)

方法 2:全自动方法

全自动方法的整个过程可以使用AutoFeatureSelect,它实现了一键自动筛选的效果,只需配置参数即可,而不像半自动需要逐一删除相关特征再应用特征选择方法等分步操作,全自动提供了更高效、更全面的方法来处理特征选择。

# 创建AutoFeatureSelect类
feat_selector = AutoFeatureSelect(modeling_type='classification',X_train=X_train,y_train=y_train,X_test=X_test,y_test=y_test,numeric_columns=num_feats,categorical_columns=cat_feats,seed=24)# 检测相关特征
corr_features = feat_selector.calculate_correlated_features(static_features=None,num_threshold=0.9,cat_threshold=0.9)
# 删除相关特征
feat_selector.drop_correlated_features()# 确定要应用的选择方法
# 所有方法的超参数都可以更改
selection_methods = ['lgbm', 'xgb', 'rf','perimp', 'rfecv', 'boruta']
final_importance_df = feat_selector.apply_feature_selection(selection_methods=selection_methods,lgbm_hyperparams=None,xgb_hyperparams=None,rf_hyperparams=None,lassocv_hyperparams=None,perimp_hyperparams=None,rfecv_hyperparams=None,boruta_hyperparams=None)# 打印结果
final_importance_df.head()

可以看到,只需几行代码就可以应用多种特征选择方法。然后会得到所有特征选择方法对所有特征的计算结果。

图片

基于这个结果,我们就可以通过自己的阈值标准对特征进行子集的组合条件筛选,得到最终的筛选特征了。

结论

autofeatselect如名字一样,初衷就是为了简化并高效完成特征选择的过程,它提供了半自动和全自动两种方法,可以根据自己的习惯和需求进行灵活使用。

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

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

相关文章

华为ensp:交换机接口划分vlan

现在要把 e0/0/1 接口放入vlan1 e0/0/2 接口放入vlan2 e0/0/3 接口放入vlan3 默认所有接口都在vlan1所以 e0/0/0 接口不用动 1.创建vlan 进入系统视图模式 直接输入 vlan 编号 即可创建对应vlan vlan 编号 vlan 2 创建vlan2 vlan 3 创建vlan3 2.将接口进入vlan…

Spring Boot自动配置原理、实战、手撕自动装配源码

Spring Boot自动配置原理 相比较于传统的 Spring 应用,搭建一个 SpringBoot 应用,我们只需要引入一个注解 SpringBootApplication,就可以成功运行。 前面四个不用说,是定义一个注解所必须的,关键就在于后面三个注解&a…

Flink SQL自定义表值函数(Table Function)

使用场景: 表值函数即 UDTF,⽤于进⼀条数据,出多条数据的场景。 开发流程: 实现 org.apache.flink.table.functions.TableFunction 接⼝实现⼀个或者多个⾃定义的 eval 函数,名称必须叫做 eval,eval ⽅法…

OpenCV-Python小应用(九):通过灰度直方图检测图像异常点

OpenCV-Python小应用(九):通过灰度直方图检测图像异常点 前言前提条件相关介绍实验环境通过灰度直方图检测图像异常点代码实现输出结果 参考 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容&#xff…

centos7安装linux版本的mysql

1.下载linux版本的mysql 进入mysql官网,点击社区版本下载: https://dev.mysql.com/downloads/mysql/ 选择版本,可以跟着我下面这个图进行选择,选择红帽版本的既可,都是linux版本的。 2.上传解压linux版本的mysql安装包…

linux安装nodejs

写在前面 因为工作需要,需要使用到nodejs,所以这里简单记录下学习过程。 1:安装 wget https://nodejs.org/dist/v14.17.4/node-v14.17.4-linux-x64.tar.xz tar xf node-v14.17.4-linux-x64.tar.xz mkdir /usr/local/lib/node // 这一步骤根…

力扣138:随机链表的复制

力扣138:随机链表的复制 题目描述: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff…

【从0到1设计一个网关】上岸大厂的秘诀之一

文章目录 前言【从0到1设计一个网关】什么是网关?以及为什么需要自研网关?【从0到1设计一个网关】自研网关的设计要点以及架构设计【从0到1设计一个网关】自研网关的架构搭建【从0到1设计一个网关】网络通信框架Netty的设计【从0到1设计一个网关】整合Na…

智能指针,c++11,单例,类型转换

c11 unique_ptr 防拷贝 shared_ptr / weak_ptr: 引用计数,支持拷贝 面试 手写shared_ptr 各种ptr的特性对比, 不会问定制删除器和weak_ptr,但是问shared_ptr时,可以往这边延展. 单例 保证一写数据在一个进程中,只有一份,并且方便访问修改. 饿汉模式 在main函数之前就创…

竞赛 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…

win10网络和Internet设置

win10网络设置 win10进入网络设置的常用入口有两个 第一个入口 桌面右下角右键网络图标,然后打开“网络和Internt设置” 第二个入口 桌面的“我的网络”快捷方式,或者我的电脑进去后,左侧栏找到“网络” 右键“属性” 可以看到,…

图论10-哈密尔顿回路和哈密尔顿路径+状态压缩+记忆化搜索

文章目录 1 哈密尔顿回路2 哈密尔顿回路算法实现2.1 常规回溯算法2.2 引入变量记录剩余未访问的节点数量 3 哈密尔顿路径问题4 状态压缩4.1 查看第i位是否为14.2 设置第i位是为1或者04.3 小结4.4 状态压缩在哈密尔顿问题中的应用 5 记忆化搜索5.1 记忆化搜索与递推区别5.2 记忆…

基于单片机的空调智能控制器的设计

**单片机设计介绍,基于单片机的空调智能控制器的设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的空调智能控制器需要具备输入输出端口、定时器、计数器等模块,以便对空调进行精确控制。下…

补坑:Java的字符串String类(3):再谈String

不太熟悉字符串的可以看看这两篇文章 补坑:Java的字符串String类(1)-CSDN博客 补坑:Java的字符串String类(2):一些OJ题目-CSDN博客 字符串创建对象 public static void main(String[] args) …

ES6学习

let和const命名 let基本用法-块级作用域 在es6中可以使用let声明变量,用法类似于var ⚠️ let声明的变量,只在let命令所在的代码块内有效 {let a 10;var b 20; } console.log(a); //a is not defined console.log(b); //20不存在变量提升 var命令…

【11】使用透视投影建立一个3D空间的测试

核心操作: 1.proj view model 这三个矩阵 glm::mat4 mvp m_Proj * m_View * model; m_Shader->Bind(); m_Shader->SetUniformMat4f("u_MVP", mvp);着色器里面就: proj:投影矩阵,可以选择正交投影,或者透视投影…

javaSE学习笔记(二)数组,类,对象,成员变量,匿名对象,构造方法,static,final,封装,继承,多态

目录 三、面向对象 1.概述 面向过程与面向对象 面向对象编程特点 面向对象三个基本特征 2.数组 数组定义格式 数组的初始化 动态初始化 静态初始化 数组的内存分配 Java中的内存分配 数组的内存分配 数组的角标 数组的基本操作 二维数组(实际开发几乎…

【网络编程】网络层——IP协议

文章目录 基本概念路径选择主机和路由器 IP协议格式分片与组装网段划分IP地址的数量限制私网IP地址和公网IP地址深入认识局域网路由 基本概念 TCP作为传输层控制协议,其保证的是数据传输的可靠性和传输效率,但TCP提供的仅仅是数据传输的策略&#xff0c…

通过商品ID获取到京东商品详情页面数据,京东商品详情官方开放平台API接口,京东APP详情接口,可以拿到sku价格,销售价演示案例

淘宝SKU详情接口是指,获取指定商品的SKU的详细信息。SKU是指提供不同的商品参数组合的一个机制,通过不同的SKU来标识商品的不同组合形式,如颜色、尺寸等。SKU详情接口可以帮助开发者获取指定商品的SKU列表,以及每个SKU的属性、库存…

多目标优化框架

随着模型越来越复杂,优化目标越来越多,传统算法都慢慢地无法胜任复杂优化任务,更为智能的优化方法也就应运而生了。其中有一类是进化优化算法,这类算法的思想来源是自然界的“优胜劣汰”法则,通过不停地保留好的个体最…