Featurewiz-Polars:一种强大且可扩展的特征选择解决方案,适用于XGBoost

news/2025/2/26 12:06:13/文章来源:https://www.cnblogs.com/jellyai/p/18738187

前言:“Featurewiz-Polars”是一个用于特征工程的 Python 库,结合了特征选择和特征生成的功能。它基于“Polars”,这是一个高性能的 DataFrame 库,用于处理大型数据集,具有类似 Pandas 的 API 但更高效,尤其在处理大数据时。Featurewiz-Polars 专注于通过自动化方式,快速从数据中提取出最有意义的特征,帮助机器学习模型提高性能。

特征选择是构建高效机器学习模型的关键步骤。

我通过艰难的经验学到了这一点。

有一个项目至今让我难以忘怀:我曾在一家金融科技初创公司做信用风险模型的工作。我们拥有了一切——交易历史、社交媒体信号、替代信用评分——并将所有这些输入到模型中,期待它能给我们提供最佳的预测。

刚开始看起来很有希望,但一旦部署,审批变得不可预测,更糟糕的是,高风险借款人开始悄悄溜过。经过数周的调试,问题变得异常明显:模型在无关和冗余特征中迷失了自己,过度拟合噪音而非实际的风险模式。

这次经历让我踏上了特征选择的漫长探索之路——反复试验、无数实验,以及对在简洁性和性能之间找到最佳平衡的执着。

在这个过程中,我从手工制作的领域启发到自动化选择方法都进行了尝试。现在,经历了所有这些痛苦的教训后,我想分享一个真正有效的方法。

介绍Featurewiz

如果你是Featurewiz的新手,这里是它的亮点:

• 只需三行代码即可自动化特征选择。

• 广泛的特征工程——它不仅选择特征;它还能自动生成数百个特征并挑选出最佳的。

• 最受认可的mRMR(最小冗余、最大相关性)实现之一,这是特征选择的黄金标准算法。

Featurewiz多年来一直是人们的首选解决方案,拥有超过600个GitHub星标和140多个Google Scholar引用。

现在,随着Featurewiz-Polars的发布,这个库已经发展得更快、更可扩展、更可靠,特别适用于大规模数据集。

如何将Featurewiz用作Scikit-Learn转换器

将Featurewiz用作兼容Scikit-Learn的转换器非常简单:

  1. 安装Featurewiz

import featurewiz as fw

  1. 创建Transformer

wiz = fw.FeatureWiz(verbose=1)

  1. 拟合并转换数据集

在这个例子中,我们将使用来自Featurewiz GitHub仓库的汽车销售数据集。加载到Pandas DataFrame后,并将其拆分为训练集和测试集,我们可以将其输入到Featurewiz中,以识别最重要的特征:

X_train, y_train = wiz.fit_transform(train[preds], train[target])

X_test = wiz.transform(test[preds])

目标是什么?使用km_driven、fuel、seller_type、transmission、owner、mileage、engine、max_power和seats等变量预测汽车销售价格。

特征选择真的能提高性能吗?

为了验证这一点,我们训练了两个模型:

• 一个使用所有特征

• 一个仅使用Featurewiz选择的最重要特征

图1:注意到使用Featurewiz选择的变量(右侧)的模型,比使用所有特征(左侧)的模型表现更好。

但是,为什么使用更少特征的模型表现更好呢?有两个关键原因:

  1. 更简单的模型能更好地泛化——减少特征复杂性有助于防止过拟合。

  2. 更快的训练和推理——更少的变量意味着更快的训练和预测,这在实际应用中至关重要。

你可以在GitHub上找到这篇博客的完整笔记本和数据集。

Featurewiz的工作原理:递归XGBoost特征选择

Featurewiz的特征选择依赖于递归XGBoost排名,逐步精炼特征集。具体过程如下:

  1. 从一切开始——将整个数据集输入到选择过程。

  2. XGBoost特征排名——训练XGBoost模型以评估特征的重要性。

  3. 选择关键特征——根据重要性评分提取最显著的特征。

  4. 修剪并重复——仅保留排名最高的特征,并在精细化的子集上重新运行过程。

  5. 迭代直到最佳——继续循环,直到满足停止标准(如稳定性或收益递减)。

  6. 完成特征集——合并所有循环中选择的特征,去除重复项,形成最终优化的特征集。

这种方法确保只有最相关、最不冗余的特征被选中,从而提高模型性能和效率。

下一步:使用Split-Driven递归XGBoost的Featurewiz-Polars

原始的Featurewiz方法非常强大,但也有一些权衡——它可能容易过拟合,并且缺乏内建的泛化机制评估。正是在这种情况下,最新版本的Featurewiz-Polars应运而生。

有什么新变化?Split-Driven递归XGBoost

这种改进的方法引入了基于验证的特征选择,利用Polars实现了速度和效率。具体过程如下:

  1. 为验证分割数据——将数据集分为训练集和验证集。

  2. XGBoost特征排名(带验证)——在训练集上评估特征的重要性,并在验证集上评估性能。

  3. 选择关键特征(带验证)——根据特征的重要性和它们的泛化能力选择特征。

  4. 使用新分割重复——在不同的训练/验证集分割下重复这个过程。

  5. 最终、稳定的特征集——合并所有运行中的选择特征,去除重复项,从而得出更强大、可靠的选择结果。

与现有库的基准比较

我们将Featurewiz-Polars与mRMR特征选择库进行了测试,使用其Polars实现进行公平比较。

测试1:克利夫兰心脏病数据集

• 原始数据集:14个特征。

• Featurewiz-Polars仅选择了3个特征,达到了91%的平衡准确率。

• mRMR选择了10个特征,但只达到了89%的平衡准确率。

Featurewiz-Polars在使用更少特征的情况下表现更好——提高了泛化能力并减少了复杂性。

以下是实际比较的截图

测试2:加州住房数据集(回归任务)

• 原始数据集:13个特征。

• Featurewiz-Polars选择了7个特征,RMSE为0.50。

• 竞争的mRMR库选择了8个特征,但RMSE稍微差一点。

同样,Featurewiz-Polars在使用更少特征的情况下提供了更优的性能。

安装指南

Featurewiz-Polars尚未发布到PyPI,但你可以从源码安装:

cd <new_folder_destination>

git clone https://github.com/AutoViML/featurewiz_polars.git

pip install -r requirements.txt

cd examples

python fs_test.py

或者直接从GitHub安装:

pip install git+https://github.com/AutoViML/featurewiz_polars.git

或者下载并解压:

https://github.com/AutoViML/featurewiz_polars/archive/master.zip

最后的想法

Featurewiz-Polars运行得更快,选择的特征更少,并且比竞争的mRMR实现提供了更好的模型性能。

如果你正在进行特征选择,试试看,自己比较一下结果吧!你可以从GitHub获取fs_test.py模块并运行你自己的基准测试。

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

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

相关文章

USACO2025FEB Gold T1 T2 题解

T3 等会补USACO2025FEB Gold 题解 赛时先看 T1,感觉很可做,推了一下发现能把问题转成在基环树上 dp。但我一下子没太想明白怎么解决“在基环树上找环”这个世纪难题,大概在一个小时 20 分钟的时候写完代码(值得一提的是这次罕见地一次就过了编译),交上去发现 WA 了大约一…

Windows10/Windows11系统快速安装杜比音效经典版教程指南

点击上方蓝字关注我 前言 在当今的数字娱乐时代,音频质量已经成为我们追求的重要部分。杜比音效,凭借其卓越的音质和沉浸式的听觉体验,成为了众多音频爱好者的首选,安装杜比音效经典版,提升电脑音频体验。无论是对于追求极致音质的音乐发烧友,还是渴望在观影和游戏时获得…

No.12 HTML5--新增标签

一、HTML5和HTMLHTML5是 HTML 最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定。 在 HTML5出现之前,我们一般采用 DIV+CSS 布局我们的页面。但是这样的布局方式不仅使我们的文档结构不够清浙,而且不利于搜索引擎爬虫对我们页面的爬取。为了解决上述缺点,HTML5新增…

ICLR 2025 | 无需训练的Token级 DiT加速方法

前言 本文分享 ICLR 2025 论文 ToCa: Accelerating Diffusion Transformers with Token-wise Feature Caching,提出的 ToCa 模型通过 token 粒度的缓存方法,实现了图像和视频生成模型上无需训练的两倍以上的加速。 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最…

Ⅱ.数据的机器级表示

章节导论: 2.1 位和数据类型 2.1.1 信息最小单位-位(0和1)(如高电压(0.9-1.1v)和低电压(0.0-0.2v)) 2.1.2 数据类型 2.2 整数 2.2.1 无符号整数 位置计数法:通过各个位置的数字不同的权重来表示一个数字 如286=2*102+8*101+6 ,在这个十进制系统中基数为10,同理,二进…

生产CPU打满问题排查

运行好好的系统,突然Prometheus告警,CUP使用率95%告警。赶紧排查一下。 一、先用top -H 命令查看占用CUP高的是哪个进程,看到PID:32518 的进程占用cup过高 二、用top -Hp 32518看看占用资源最多的线程 三、用jstack 32518 > 32518.jstack.log 命令把线程堆栈打印出来四、使…

3 2000年英语一阅读理解Text3

3 2000年英语一阅读理解Text3When a new movement in art attains a certain fashion, it is advisable to find out what its advocates are aiming at, for, however farfetched and unreasonable their principles may seem today, it is possible that in years to come th…

网盘批量分享,转存,重命名,资源监控,数据同步工具

在当今数字化时代,网盘已成为我们存储和分享文件的重要工具。然而,面对多个网盘和账号,如何高效管理这些资源成为了许多用户的难题。为此,我们推出了一款多功能网盘管理工具,旨在帮助用户轻松实现批量操作、资源监控和数据同步,提升文件管理效率。核心功能批量分享与转存…

若依开后端开发常见问题

前端填写完数据后点击提交,出现以上错误,很明显是时间格式出了问题,来看一下后端控制台:可以看出是没有统一时间格式导致的,此类情况请检查后端代码,可以在LocalDateTime类型的时间属性上增加@JsonFormat注解,效果如下:修改完成后问题解决

Beats详解

一、Beats平台介绍 1.1 Beats介绍Beats是开源数据发送者,可以将其作为代理安装在您的服务器上,以将不同类型的运营数据发送到Elasticsearch。Beats可以直接发送数据到Elasticsearch或通过Logstash发送到Elasticsearch,可以使用它来分析和转换数据。 Packetbeat,Fileb…

Navicat17如何安装?附安装包及激活教程

前言 大家好,我是小徐啊。我们在开发Java应用的时候,一般是要连接数据库的。而连接数据库的常用工具就是navicat,它的功能十分强大。今天,小徐就来介绍下如何安装navicat17,以及如何激活。文末附获取方式。 如何安装和激活 首先,打开我们的安装包,双击下,开始安装。然后…

【Cursor】Cursor不显示Claude3.7

问题 Cursor模型选择中没有Claude 3.7 sonnet 原因 版本不支持 解决方案 升级版本至0.46 操作步骤 Cursor升级没有GUI界面按钮 需要使用Command(Ctrl)+Shift+P 呼出命令行 然后输入Cursor: Attempt Update即可升级 升级后进入Cursor Setting->Model 就可以看到Claude 3.7 …