前言:“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模块并运行你自己的基准测试。

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

  1. 6个强大的AngularJS扩展应用

    本文链接:http://www.codeceo.com/article/6-angularjs-extension.html本文作者:码农网 – 小峰 AngularJS现在非常热门,是Google推 ...

  2. inotify 工具 是一种强大的、细粒度的、异步文件系统监控机制

    前言:Inotify是一种强大的.细粒度的.异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性.读写属性.权限属性.删除创建.移动等操作,也就是可以监控文件发生的一切变化. ...

  3. strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。

    strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. http://bbs.51cto.com/thread-1106891-1.html

  4. Advanced Archive Password Recovery (ARCHPR) 是一个强大的压缩包密码破解工具,适用于ZIP和RAR档案的高度优化的口令恢复工具。

    RAR压缩文件密码破解工具是一款简单易用的RAR文档和ZIP文档密码破解软件,如果你不小心忘了解压密码或是下载的RAR文件需要密码,那么均可以使用本软件进行暴力破解.不管WinRAR /RAR 的密码 ...

  5. Z.ExtensionMethods 一个强大的开源扩展库

    今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提到而已,没有专门介绍,才引起我写这篇文档 ...

  6. inuit.css – 基于 Sass 的强大,可扩展的 CSS 框架

    inuit.css 是一个强大的,可扩展的 CSS 框架,另外还是基于 Sass,面向对象的框架.inuit.css 是建立在 BEM 风格的命名约定,非常适合于想要专注于创意而不是代码的设计师以及喜 ...

  7. Android几种强大的下拉刷新库

    BeautifulRefreshLayout 众多优秀的下拉刷新(除了我写的之外T_T) 说起下拉刷新,好像经历一段历史的洗礼... (1)在我刚学android的时候,用的是XListView,在g ...

  8. 开源且功能强大的C# 扩展方法类库Pure.Ext,包含1000+个拓展方法 (支持.Net Framework和.Net Core)

    先上地址 Github: https://github.com/purestackorg/pure.ext Gitee: https://gitee.com/purestack/pure.ext 扩展 ...

  9. java基础(1)-几种获取类的扩展方式

    摘要 在日常开发过程中经常需要获取类的扩展集.即获取类的子类集(抽象类),或者接口实现类.比如说状态模式中,状态构建类,策略模式中的,策略构造方式.本文介绍几种获取方式. 实现 以策略模式为例 定义了 ...

  10. php安装imagemagick扩展 常见问题与解决方案(win平台)

    1.写在前面 1-1.ImageMagick介绍 ImageMagick是一套功能强大.稳定而且开源的工具集和开发包,可以用来读.写和处理超过89种基本格式的图片文件,包括流行的TIFF.JPEG.G ...

随机推荐

  1. R数据分析:网状meta分析的理解与实操

    meta分析之前有给大家写过,但是meta分析只能比较两个方法.经常是被用来证明在现有研究中显示矛盾结果的干预方法到底有没有效的时候使用,通过证据综合得到某种干预到底有没有用的结论.但是如果我要证明好 ...

  2. 中电金信鲸Bot RPA荣获最佳人工智能解决方案

    近年来,数字经济已成为国家"十四五"规划和"新基建"战略的重要支撑.银行业作为我国经济体系的重要组成部分,其发展战略也出现了新的变化.数字化智能化转型成为银行业 ...

  3. 【前端】CSS:border

    border 是CSS中用于设置元素边框的. 第一个参数为线的粗细.除了数字型值外,还可以写: thin(细线) medium(中粗线) thick(粗线) 第二个参数是线条样式,可选参数如下: 小圆 ...

  4. maven打包时跳过TEST的方式汇总

    使用maven打包时如何跳过test,有以下几种方式 针对spring项目 <plugin> <groupId>org.apache.maven.plugins</gro ...

  5. IDEA和GIT关于文件中LF和CRLF问题

    问题描述:项目软件安装shell脚本上git仓库管理,但拉取后,上linux运行报错. 问题思考:根据描述信息可以查看到\r字样,初步判别为换行符导致 1.将脚本文件移动至notepad++中,通过视 ...

  6. Qt/C++音视频开发46-音视频同步保存到MP4

    一.前言 用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可.最难的是在播放过程中 ...

  7. Qt音视频开发13-视频解码线程基类的设计

    一.前言 这个解码线程基类的设计,是到目前为止个人觉得自己设计的最好的基类之一,当然也不是一开始就知道这样设计,没有个三五年的摸爬滚打以及社会的毒打,是想不到要这样设计的,一方面是要不断提炼各种视频类 ...

  8. Qt编写安防视频监控系统37-onvif预置位

    一.前言 预置位在视频监控系统中是不可或缺的存在,响应预置位功能的前提是要带预置位的云台球机,有些普通的云台球机其实不带预置位的,这个要检查清楚,硬件上不支持该功能的,你再怎么点也没反应.在这个视频监 ...

  9. 从零开始构建一个基于大模型和 RAG 的知识库问答系统

    SimpleAbdQA 本项目所使用的大模型为:qwen1.8b 演示中所使用Embedding为:Word2vec 一.介绍 通过从本项目中,你可以得到: 了解基于大模型的本地知识库的运作原理 了解 ...

  10. elementPlus 问题总结

    第一次搞,遇上很多弱智问题,记录一下 安装elementPlus $ npm install element-plus --save 全局引入 import ElementPlus from 'ele ...