当前位置: 首页 > news >正文

使用 feature_engine库 提升你的机器学习特征工程效率


文章目录

  • 1 安装
  • 2 MeanEncoder (目标编码)
  • 3 RareLabelEncoder
  • 4 OrdinalEncoder
  • 5 DecisionTreeEncoder
  • 6 MeanMedianImputer
  • 7 ArbitraryNumberImputer
  • 8 MissingIndicator
  • 9 LogTransformer
  • 10 PowerTransformer
  • 11 Winsorizer (异常值截断器)
  • 12 总结
  • 13 GitHub


在这里插入图片描述

在机器学习中,特征工程的质量决定了模型的成败。你可能听过这样一句话:“垃圾进,垃圾出。”

现在,有一个名为 feature_engine 的库,它能帮助你在数据进入模型之前进行清理。更棒的是:这个包兼容 scikit-learn,并内置了多种工具,可以以简单、可复现的方式进行转换、编码和处理缺失值。

在这篇文章中,我们将介绍 feature_engine 中 10 种最佳方法,你可以立即开始使用。

1 安装

为了应用这些知识,我们可以加载 Seaborn 中的 Attention 数据集,该数据集在 BDS 3 许可下开源。

import pandas as pd
import seaborn as snsdf = sns.load_dataset('attention', index_col=[0])
df.head(3)

数据集视图。

别忘了安装 feature_engine。

pip install feature_engine --quiet

2 MeanEncoder (目标编码)

当分类变量具有太多级别时,这种编码器非常有用。MeanEncoder 不会创建数百个独热编码列,而是用目标变量的均值替换类别。

from feature_engine.encoding import MeanEncoderX = df.drop('score', axis=1)
y = df['score']e = MeanEncoder(variables=['attention'])
X_encoded = e.fit_transform(X, y)
subject   attention   solutions5        5.116667      113        6.800000      3

可以把它想象成根据平均评分来评价餐馆,而不是列出每一条评论。但别忘了谨慎应用,以避免数据泄露。

  • 文档:MeanEncoder

3 RareLabelEncoder

有时,有些类别只出现过少数几次。RareLabelEncoder 不会让这些稀有类别混淆你的模型,而是将它们分组到一个单一的“Rare”标签中。

from feature_engine.encoding import RareLabelEncoderdf.loc[len(df)] = [1, 'not-focused', 0, 0]X = df.drop('score', axis=1)
y = df['score']r = RareLabelEncoder(tol=0.05, n_categories=2)
X_encoded = r.fit_transform(X)
X_encoded
subject   attention   solutions20       focused       31        Rare          0

如果你有一个分类列,这个方法有助于防止“以上任意一项”破坏你的模型。

  • 文档:RareLabelEncoder

4 OrdinalEncoder

当类别具有自然顺序时,OrdinalEncoder 是正确的选择。例如,教育水平:高中 < 本科 < 硕士 < 博士

from feature_engine.encoding import OrdinalEncodero = OrdinalEncoder(encoding_method='arbitrary')
X_encoded = o.fit_transform(X)

这比将有序类别转换为随机数字要好。

  • 文档:OrdinalEncoder

5 DecisionTreeEncoder

DecisionTreeEncoder 使用决策树来寻找编码类别的智能方法。它基本上会问:“类别如何划分目标变量?”

from feature_engine.encoding import DecisionTreeEncoderdt = DecisionTreeEncoder(random_state=42)
X_encoded = dt.fit_transform(X, y)
subject   attention   solutions5       5.5116667       117       6.8000000       3

把它想象成一个类别“低语者”——它倾听数据并找到最佳划分。

  • 文档:DecisionTreeEncoder

6 MeanMedianImputer

缺失数据无处不在。MeanMedianImputer 使用均值或中位数填充数值型缺失值。

from feature_engine.imputation import MeanMedianImputer
import numpy as npdf.loc[len(df)] = [1, 'not-focused', np.nan, 0]X = df.drop('score', axis=1)
y = df['score']imp = MeanMedianImputer(imputation_method='median')
X_imputed = imp.fit_transform(X)

如果你缺少某人的年龄,那么该组的年龄中位数通常是一个公平的猜测。

  • 文档:MeanMedianImputer

7 ArbitraryNumberImputer

有时你希望缺失值能够突出。ArbitraryNumberImputer 允许你用一个特定的数字填充它们,比如 -999。

from feature_engine.imputation import ArbitraryNumberImputerimp = ArbitraryNumberImputer(arbitrary_number=-999)
X_imputed = imp.fit_transform(X)

当缺失本身可能带有意义时,这很方便——比如客户没有报告收入。

  • 文档:ArbitraryNumberImputer

8 MissingIndicator

想标记缺失值而不是填充它们吗?MissingIndicator 创建二进制列,指示值是否缺失。

from feature_engine.imputation import AddMissingIndicatormi = AddMissingIndicator()
X_with_flags = mi.fit_transform(X)
subject   attention   solutions   solutions_na20       focused       3.0         01        not-focused   NaN         1

这就像在空单元格上贴上便利贴——有时数据的缺失比数据本身更能说明问题。

  • 文档:AddMissingIndicator

9 LogTransformer

许多数据集具有偏态分布。LogTransformer 应用对数变换,使其更接近正态分布。

from feature_engine.transformation import LogTransformerX = df.drop('score', axis=1)
y = df['score']lt = LogTransformer(variables=['solutions'])
X_transformed = lt.fit_transform(X)

非常适合收入、房价或任何少数富人会扰乱你的直方图的数据。

  • 文档:LogTransformer

10 PowerTransformer

当简单的对数变换不足时,PowerTransformer 提供 Box-Cox 和 Yeo-Johnson 变换。它对数值变量应用幂变换或指数变换。如果未提供变量列表,它将转换所有数值变量。

from feature_engine.transformation import PowerTransformerpt = PowerTransformer(variables=['skewed_var'])
X_transformed = pt.fit_transform(X)

当你的数据不“听话”时,这就像给它做了一次“改造”。

  • 文档:PowerTransformer

11 Winsorizer (异常值截断器)

异常值可能会毁掉你的模型。Winsorizer 会限制极端值,以减少它们的影响。

from feature_engine.outliers import Winsorizerdf.loc[len(df)] = [100, 'winsorize this', 0, 0]X = df.drop('score', axis=1)
y = df['score']w = Winsorizer(capping_method='iqr')
X_winsorized = w.fit_transform(X)

例如,如果有人报告年收入 $50M,Winsorizer 可以防止这个异常值扭曲你的整个数据集。

  • 文档:Winsorizer

12 总结

特征工程不必杂乱无章或耗时。

有了 feature_engine,你将获得一致、对管道友好的工具,可以处理预处理中最棘手的部分。无论是编码类别、填充缺失值还是驯服异常值,这些方法都能为你提供支持。

请记住,它与 sklearn 的管道集成得非常好,使得这个包在处理机器学习模型时更加不可或缺。

一个管道的快速示例:

df.loc[len(df)] = [1, 'not-focused', np.nan, 0]X = df.drop('score', axis=1)
y = df['score']steps = [('imputer', MeanMedianImputer(imputation_method='mean')),('encoder', MeanEncoder(variables=['attention'])),('model', LinearRegression())
]pipe = Pipeline(steps)pipe.fit(X, y)print(f'First 4 predictions: {pipe.predict(X)[:4]}')print(f'\nScore: {pipe.score(X, y)}')

13 GitHub

这是本参考指南的完整代码。Feature_Engine.ipynb

http://www.dtcms.com/a/398778.html

相关文章:

  • 做网站网络公司无收入域名管理系统
  • 2,GUI Guider的安装与导入STM32裸机工程
  • 上门代管宠物系统的设计与实现
  • 鸿蒙Next应用开发:ArkTS语言下的IPC与RPC通信指南
  • CTFSHOW 中期测评(二)web502 - web516
  • JVM-执行引擎
  • 企业手机网站源码网站建设相关资质
  • python项目: Thinkphp框架漏洞扫描器集成
  • 车载通信架构 ---新一代车载通信框架
  • 建设银行网站怎么注销网银网站建设网页制作
  • 【25软考网工】第五章(10) Internet应用
  • Android target35适配之窗口边衬区变更
  • 设计网站推荐百度贴吧装修设计比较好的网站
  • 营销网站四大要素谷歌做自己的网站
  • 【OpenGL】LearnOpenGL学习笔记27 - HDR、Bloom
  • MySQL 学习笔记 (Part.1)
  • 《代码大全》笔记
  • 【低代码】阿里Formily通用设计工具Designable学习记录
  • 网站建设客户wordpress如何看网页地址
  • php做的网站如何发布新类型网站
  • mq是如何实现的
  • 【区间贪心】P3661 [USACO17FEB] Why Did the Cow Cross the Road I S|普及+
  • AIGC实战——BicycleGAN详解与实现
  • 基于Element Plus的Vue3远程搜索多选组件实现与优化
  • 网站只做静态页面安全受到影响南昌旅游集团网站建设
  • pom.xml 不在根目录,idea无法识别项目处理方案
  • 网站开发所需硬件昆明微网站搭建
  • 【第25话:路径规划】自动驾驶路径规划概念与理论介绍
  • QT多窗口跳转
  • 栈(Stack)