Feature-engine#

一个用户友好的特征工程替代方案,用于替代Scikit-learn#

_images/FeatureEngine.png

Feature-engine 很棒!#

Feature-engine 是一个 Python 库,包含多个用于机器学习模型特征工程和选择的转换器。与 Scikit-learn 类似,Feature-engine 使用 fit()transform() 方法来学习参数并转换数据。

使用数据框?👉 Feature-engine 是一个无需多想的选择#

与 Scikit-learn 不同,Feature-engine 设计用于处理数据框。不会改变列的顺序或名称。数据框输入,相同的数据框输出,只是变量经过了转换。

我们通常对不同的特征子集应用不同的特征工程过程。使用 sklearn,我们通过使用一个辅助类来限制特征工程技术到某些变量组:ColumnTransformer。这个类还会导致变量在转换后名称的改变。

Feature-engine 允许你在每个转换器中选择你想要转换的变量 每个转换器中。这样,不同的工程过程可以轻松地应用于不同的特征子集,而无需额外的转换器或更改特征名称。

位于 pandas 和 scikit-learn 的接口处#

Pandas 非常适合数据分析和转换。我们也 ❤️ 它。但它不会自动从数据中学习和存储参数。而这对于机器学习是关键的。这就是我们创建 Feature-engine 的原因。

Feature-engine 将 pandas 功能封装在类似 Scikit-learn 的转换器中,捕获了学习、存储参数所需的大部分 pandas 逻辑,同时使这些转换与 Scikit-learn 估计器、选择器、交叉验证函数和超参数搜索方法兼容。

如果你的工作主要是为机器学习进行数据分析和转换,并且pandas和scikit-learn是你的主要工具,那么Feature-engine就是你的朋友。

Feature-engine 转换器#

Feature-engine 包含以下转换器:

  • 缺失数据插补

  • 分类特征的编码

  • 离散化

  • 异常值的限制或移除

  • 特征变换

  • 创建新功能

  • 特征选择

  • 日期时间特征

  • 时间序列

  • 预处理

Feature-engine 转换器与 scikit-learn 完全兼容。这意味着你可以在 Scikit-learn 管道中组装 Feature-engine 转换器,或者在超参数的网格搜索或随机搜索中使用它们。查看 **快速开始** 以获取示例。

你是怎么找到我们的?👀#

我们希望与更多人分享 Feature-engine。如果您能告诉我们您是如何发现我们的,这将对我们有很大帮助。

然后我们可以知道我们在做什么是对的,以及我们应该使用哪些渠道来分享爱。

_images/how-did-you-discover.png

🙏 请通过回答1个快速问题来分享你的故事 在这个链接 😃

什么是特征工程?#

特征工程是利用领域知识和统计工具为机器学习算法创建特征的过程。我们通常作为业务活动一部分收集的原始数据很少适合训练机器学习模型。相反,数据科学家花费大量时间进行数据分析、预处理和特征工程。

Pandas 是一个常用的数据预处理和特征工程库。它几乎支持所有常用的数据转换方法。然而,pandas 不能直接与 sklearn 兼容,也无法学习和存储特征工程参数。

Feature-engine 的转换器围绕一个 API 封装了 pandas 的功能,该 API 公开了 fittransform 方法,用于从数据中学习和存储参数,然后使用这些参数来转换变量。通过这种方式,Feature-engine 使 pandas 中强大的功能完全兼容 Scikit-Learn。

Feature-engine 有什么独特之处?#

以下特性使得 Feature-engine 独一无二:

  • Feature-engine 包含了最全面的特征工程转换集合。

  • Feature-engine 可以直接对数据框中的特定变量组进行转换。

  • Feature-engine 返回数据框,因此适用于数据分析和模型部署。

  • Feature-engine 与 Scikit-learn 管道、网格搜索、随机搜索和交叉验证兼容。

  • Feature-engine 自动识别数值、分类和日期时间变量。

  • Feature-engine 会在无法进行转换时提醒你,例如,对负变量应用对数或除以0。

安装#

Feature-engine 是一个 Python 3 包,并且与 3.9 或更高版本兼容。

安装 Feature-engine 最简单的方法是通过 PyPI 使用 pip:

$ pip install feature-engine

注意,你也可以用以下方式安装它:

$ pip install feature_engine

Feature-engine 是一个活跃的项目,并定期发布新版本。要升级 Feature-engine 到最新版本,请使用 pip 如下操作:

$ pip install -U feature-engine

如果你使用的是 Anaconda,你可以安装 Anaconda Feature-engine 包

$ conda install -c conda-forge feature_engine

Feature-engine 功能在以下教程中#

更多学习资源请参见 **学习资源**

Feature-engine 的转换器#

Feature-engine 托管了以下几组转换器:

缺失数据插补:插补器#

缺失数据插补包括用对那些nan值的估计或任意数据点来替换分类数据和数值变量中的缺失值。Feature-engine支持以下缺失数据插补方法:

分类编码器:编码器#

分类编码是将分类值替换为数值的过程。大多数机器学习模型,特别是那些由 scikit-learn 支持的模型,不接受字符串作为输入。因此,我们需要将这些字符串转换为这些模型可以解释的数字。

有多种分类编码技术,包括独热编码、序数编码和目标编码。Feature-engine 支持以下方法:

变量离散化:离散器#

离散化,或分箱,包括将数值特征排序到离散区间中。最常用的方法是等宽和等频离散化。Feature-engine 支持这些以及更高级的方法,如使用决策树进行离散化:

异常值上限或移除#

离群值是指与变量观察到的分布非常不同的值。一些机器学习模型和统计测试对离群值敏感。在某些情况下,我们可能希望移除离群值或将其替换为允许的值。

数值变换:变换器#

我们通常使用方差稳定变换来使数据满足某些统计检验(如方差分析)和机器学习模型(如线性回归)的假设。Feature-engine 支持以下变换:

功能创建:#

Feature-engine 允许你通过数学组合或使用数学函数转换来创建新特征:

  • 数学特性: 通过结合特征与数学运算来创建新变量

  • 相对特征: 结合变量与参考特征

  • CyclicalFeatures:使用正弦和余弦创建变量,适用于周期性特征

  • 决策树特征: 创建由决策树对一个或多个特征的预测结果产生的变量

日期时间:#

数据科学家很少在机器学习模型中使用原始表示的日期时间特征。相反,我们从日期时间变量的日期和时间部分提取许多新特征:

特征选择:#

更简单的模型更容易解释、部署和维护。Feature-engine 扩展了其他库(如 sklearn 和 MLXtend)中现有的特征选择功能,增加了额外的方法:

预测:#

为了通过使用传统机器学习算法将预测视为回归问题,我们首先需要将时间序列转换为静态特征表。我们可以通过滞后和窗口结合对过去数据的聚合来实现这一点:

预处理:#

在转换变量和进行数据清洗时,我们通常会改变变量的数据类型(在 pandas 中称为 dtype)。这些改变可能会在后续的数据处理流程中引发问题。为了直接解决这个问题,Feature-engine 提供了转换器,以确保数据类型和变量名称匹配。

  • 匹配类别: 确保分类变量是 ‘category’ 类型

  • 匹配变量: 确保测试集中的列与训练集中的列匹配

Scikit-learn 包装器:#

scikit-learn 的 ColumnTransformer 的替代方案:

特征缩放#

Scikit-learn 提供了全面的一系列工具来应用数据归一化、标准化和最小-最大缩放等过程,因此我们认为没有必要将这些功能引入 Feature-engine。如果你想仅对变量的一个子集应用这些程序,请查看 SklearnTransformerWrapper:

获取帮助#

无法让某些功能正常工作?以下是你可以寻求帮助的地方。

  1. 文档中的 **用户指南**

  2. Stack Overflow. 如果你提问,请在其中提及“feature_engine”。

  3. 如果你报名参加了 机器学习特征工程课程 ,请在相关部分发表一个问题。

  4. 如果你报名参加了 机器学习中的特征选择课程 ,请在相关部分发布一个问题。

  5. 加入我们的 gitter 社区。你也可以在这里提问。

  6. 在仓库中通过提交一个 issue 来提问(在提交之前检查是否已经存在类似的问题 :) )。

贡献#

有兴趣为 Feature-engine 做贡献吗?那真是太好了!

Feature-engine 是一个欢迎和包容的项目,我们非常高兴能有您的加入。我们遵循 Python 软件基金会行为准则

无论你的技能水平如何,你都可以帮助我们。我们感谢错误报告、用户测试、功能请求、错误修复、测试的添加、产品增强和文档改进。我们也欢迎关于 Feature-engine 的博客。如果你有,请告诉我们!

有关如何贡献的更多详细信息,请查看贡献页面。点击 **贡献** 指南。

开源#

Feature-engine 的 许可证 是一个开源的 BSD 3-Clause 许可证。

Feature-engine 托管在 GitHub 上。问题拉取请求 在那里被跟踪。