用Python实现特征工程之特征变换——数值特征的归一化和标准化、类别特征的编码、特征组合和分解、特征缩放

news2024/12/26 11:52:48

特征工程中的特征变换是一个重要的步骤,旨在通过转换原始特征来提高模型的性能。特征变换主要包括数值特征的归一化和标准化、类别特征的编码、特征组合和分解、以及特征缩放等。下面将详细讲解这些内容,并提供相应的Python代码示例。

1. 数值特征的归一化和标准化

归一化(Normalization)

归一化是将特征的值缩放到一个固定的范围(通常是 [0, 1])内。归一化常用于在特征值范围差异较大的情况下,减小这种差异对模型的影响。

归一化的公式通常为:

X_{norm}=\frac{X-X_{min}}{X_{max}-X{_{min}}}

标准化(Standardization)

标准化是将特征的值转换为均值为0、标准差为1的正态分布。标准化在数据具有不同的度量单位或不同的范围时非常有用。

标准化的公式为:

X_{std}=\frac{X-\mu }{\sigma }

示例代码:
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler

# 生成示例数据
data = {'feature1': np.random.rand(100) * 10, 'feature2': np.random.rand(100) * 100}
df = pd.DataFrame(data)

# 归一化
scaler = MinMaxScaler()
df[['feature1_norm', 'feature2_norm']] = scaler.fit_transform(df[['feature1', 'feature2']])

# 标准化
scaler = StandardScaler()
df[['feature1_std', 'feature2_std']] = scaler.fit_transform(df[['feature1', 'feature2']])

print(df.head())
运行结果示例:
   feature1   feature2  feature1_norm  feature2_norm  feature1_std  feature2_std
0  5.371278  50.936181       0.537127       0.509362     0.177720     0.066669
1  1.122034  89.489587       0.112203       0.894896    -1.264731     1.370891
2  7.991217  16.046858       0.799122       0.160469     1.139588    -1.162611
3  4.543309  18.512042       0.454331       0.185120    -0.044308    -1.063248
4  6.940704   8.839065       0.694070       0.088391     0.718581    -1.480131

2. 类别特征的编码

类别特征编码是将离散的类别变量转换为数值变量,使其可以被模型理解。常见的类别编码方法包括独热编码、标签编码、频率编码和目标编码。

独热编码(One-Hot Encoding)

独热编码将每个类别转换为一个独立的二进制特征。每个特征只包含0或1,表示某个类别是否存在。

标签编码(Label Encoding)

标签编码将每个类别映射到一个唯一的整数。适用于具有顺序关系的类别变量。

示例代码:
from sklearn.preprocessing import OneHotEncoder, LabelEncoder

# 生成示例数据
df = pd.DataFrame({'category': ['A', 'B', 'C', 'A', 'B', 'C']})

# 独热编码
onehot_encoder = OneHotEncoder(sparse=False)
onehot_encoded = onehot_encoder.fit_transform(df[['category']])
onehot_df = pd.DataFrame(onehot_encoded, columns=onehot_encoder.get_feature_names_out(['category']))

# 标签编码
label_encoder = LabelEncoder()
df['category_encoded'] = label_encoder.fit_transform(df['category'])

print(df.head())
print(onehot_df.head())
运行结果示例:
  category  category_encoded
0        A                 0
1        B                 1
2        C                 2
3        A                 0
4        B                 1

   category_A  category_B  category_C
0         1.0         0.0         0.0
1         0.0         1.0         0.0
2         0.0         0.0         1.0
3         1.0         0.0         0.0
4         0.0         1.0         0.0

3. 特征组合和分解

特征组合和分解是通过组合现有特征或分解特征来创建新的特征,从而增加模型的表达能力。

特征组合

特征组合通过交互或多项式特征生成新的特征。例如,将两个数值特征相乘或取它们的平方。

特征分解

特征分解通过将一个复杂的特征分解成多个简单的特征。例如,将一个日期特征分解为年、月、日。

示例代码:
from sklearn.preprocessing import PolynomialFeatures

# 生成示例数据
df = pd.DataFrame({'feature1': [1, 2, 3, 4, 5], 'feature2': [10, 20, 30, 40, 50]})

# 特征组合(多项式特征)
poly = PolynomialFeatures(degree=2, include_bias=False)
poly_features = poly.fit_transform(df)
poly_df = pd.DataFrame(poly_features, columns=poly.get_feature_names_out(['feature1', 'feature2']))

# 特征分解(日期分解)
df['date'] = pd.to_datetime(['2022-01-01', '2022-02-01', '2022-03-01', '2022-04-01', '2022-05-01'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day

print(df.head())
print(poly_df.head())
运行结果示例:
   feature1  feature2  year  month  day
0         1        10  2022      1    1
1         2        20  2022      2    1
2         3        30  2022      3    1
3         4        40  2022      4    1
4         5        50  2022      5    1

   feature1  feature2  feature1^2  feature1 feature2  feature2^2
0         1        10           1           10         100
1         2        20           4           40         400
2         3        30           9           90         900
3         4        40          16          160        1600
4         5        50          25          250        2500

4. 特征缩放

特征缩放是指将特征数据进行比例调整,以便它们位于一个更合理的范围内,通常在应用梯度下降类算法时尤为重要。

常见方法:
  • 最小-最大缩放(Min-Max Scaling):将数据缩放到指定范围内,通常是[0, 1]。
  • Z-Score缩放:将数据缩放为均值为0,标准差为1的分布。
示例代码:
from sklearn.preprocessing import MinMaxScaler, StandardScaler

# 生成示例数据
data = {'feature1': [1, 2, 3, 4, 5], 'feature2': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)

# 最小-最大缩放
scaler = MinMaxScaler()
df[['feature1_minmax', 'feature2_minmax']] = scaler.fit_transform(df[['feature1', 'feature2']])

# Z-Score缩放
scaler = StandardScaler()
df[['feature1_zscore', 'feature2_zscore']] = scaler.fit_transform(df[['feature1', 'feature2']])

print(df.head())
运行结果示例:
   feature1  feature2  feature1_minmax  feature2_minmax  feature1_zscore  feature2_zscore
0         1        10              0.0              0.0        -1.414214        -1.414214
1         2        20              0.25             0.25        -0.707107        -0.707107
2         3        30              0.5              0.5          0.000000         0.000000
3          4        40              0.75             0.75         0.707107         0.707107
4          5        50              1.0              1.0          1.414214         1.414214

5. 总结

  • 归一化标准化 是数值特征变换中的常用方法,可以使特征更适合用于模型训练。
  • 类别特征编码 通过将类别数据转换为数值数据,使模型能够理解类别特征。
  • 特征组合和分解 通过生成新的特征或分解复杂特征来增加模型的表达能力。
  • 特征缩放 通过调整特征的比例,使其更适合于模型训练,特别是在应用梯度下降等算法时。

这些特征变换方法在特定的场景下能够显著提高模型的性能,是特征工程中不可忽视的重要步骤。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么要选择开放式耳机?开放式耳机的优缺点

今天咱们来聊聊一个特别有意思的话题:为什么我们要选择开放式耳机?在这个耳机种类繁多的世界里,开放式耳机以其独特的魅力,赢得了不少音乐爱好者和运动达人的青睐。 开放式耳机最大的特点就是它不会完全封闭你的耳朵,这…

C语言之“ 分支和循环 ” (2)

🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:C语言基础 目录 前言 一、switch语句 1.1 if语句和switch语句的对比 1.2 switch语句中的break 1.3 switch语句中的default 1.4 switch语句中的case和default…

信息系统运维管理:深度解析与方案建议

在现代企业环境中,信息系统运维管理扮演着至关重要的角色。它不仅是信息系统高效、安全和稳定运行的保障,更是企业业务发展的坚实支撑。本文将深入探讨服务设计阶段、服务转换阶段、委托系统维护管理这三个关键阶段,并结合最新的互联网技术和…

Transformer模型注意力机制;层归一化(Layer Normalization)

目录 Transformer模型注意力机制 注意力机制(Attention Mechanism) 层归一化(Layer Normalization) 层归一化的作用 Transformer模型注意力机制 中,有几个关键的公式和概念需要解释,包括注意力机制(Attention Mechanism)和层归一化(Layer Normalization)。以下是…

halcon不良黄豆数量检测和大米视觉处理winform

winform halcon不良黄豆数量检测 不良黄豆数量检测.hdev 首先检测黄豆的数量 然后检测不良黄豆的数量 在winform中对其进行分开显示处理 大米视觉处理类似 这段代码主要用于图像处理和显示,使用的是Halcon语言。让我们逐步解释每个部分的功能: 构造函数…

Adnroid 数据存储:SharedPreferences详解【SharedPreferencesUtils,SharedPreferences的ANR】

目录 1)SP是什么、如何使用,SPUtils 2)SP的流程 3)comit和apply 一、SP是什么,如何使用,SPUtils 1.1 SP是什么? SharedPreferences是Android平台提供的一种轻量级的数据存储方式,…

【Linux SQLite数据库】一、SQLite交叉编译与移植

SQLite 是一个用 C 语言编写的开源、轻量级、快速、独立且高可靠性的 SQL 数据库引擎,它提供了功能齐全的数据库解决方案。SQLite 几乎可以在所有的手机和计算机上运行,它被嵌入到无数人每天都在使用的众多应用程序中。此外,SQLite 还具有稳定…

git push上不去的问题Iremote reiectedl——文件过大的问题

在新建分支的时候,发现push怎么也上传不上去,一开始觉得是权限的问题,但是尝试了各种方案都没有用,后面再仔细看了一下是文件太大了,远程拒绝推送 接下来,和大家讲讲我的解决方案 1、把修改的代码迁移到新…

将QT工程打包生成可单独运行的.exe程序

将QT工程打包生成可单独运行的.exe程序 1、生成exe文件2、导入qt配置文件3、打包qt配置文件和exe文件4、单个可执行exe文件 1、生成exe文件 Qt中执行Release操作,生成对应的exe文件。 Release的路径下会生成如下文件: 进入release文件夹,双…

【Linux基础】Linux基本指令(二)

目录 &#x1f680;前言一&#xff0c;mv指令二&#xff0c;more & less指令2.1 more 指令2.1 less指令 三&#xff0c;重定向技术(重要)3.1 echo指令3.2 输出重定向 >3.3 追加重定向 >>3.4 输入重定向 < 四&#xff0c;head & tail指令4.1 head 指令4.2 t…

应急响应:D盾的简单使用.

什么是应急响应. 一个组织为了 应对 各种网络安全 意外事件 的发生 所做的准备 以及在 事件发生后 所采取的措施 。说白了就是别人攻击你了&#xff0c;你怎么把这个攻击还原&#xff0c;看看别人是怎么攻击的&#xff0c;然后你如何去处理&#xff0c;这就是应急响应。 D盾功…

PLL基本原理、设计及应用

PLL基本原理 锁相环&#xff08;Phase-Locked Loop, PLL&#xff09;是一种基本的反馈控制系统&#xff0c;广泛应用于电子通信、信号处理、时钟同步等多个领域。PLL通过反馈机制锁定输入信号的频率和相位&#xff0c;从而实现输出信号与输入信号的同步。其基本工作原理可以概…

Linux知识复习第2期

RHCE 远程登录服务-CSDN博客 Linux 用户和组管理_linux用户和组的管理-CSDN博客 Linux 文件权限详解-CSDN博客 目录 1、sshd 免密登录 (1)纯净实验环境 (2)生成密钥 (3)上锁 2、用户管理 (1)添加新用户 (2)删除用户 (3)修改用户信息 (4)为用户账号设…

vue路由学习

1、基本了解 &#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09;在创建vue项目时&#xff0c;就已经勾选了vue-router 2、 &#xff08;0&#xff09;自己手写了一个新的组件文件(部门管理)&#xff08;DeptView.vue&#xff09; &#xff08;1&a…

金坛网报道数学应用研讨会在坛开幕,赛氪做协办单位出席参加

2024年8月5日-7日&#xff0c;由中国优选法统筹法与经济数学研究会和河海大学联合主办&#xff0c;百度、杉数科技、玻色量子、京东物流、赛氪网协办的第九届数学在企业中的应用研讨会在河海大学常州校区隆重开幕。此次研讨会旨在继承和发扬华罗庚先生倡导的数学与行业应用紧密…

LVS负载均衡+集群+三种工作模式+调度算法及实战案例

一、LVS 1.1简介 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&#xff0c;是由章文嵩主导开发的开源负载均衡项目&#xff0c;目前&#xff0c;LVS已经被集成到Linux内核模块中。该项目实现了在基于IP的数据基础上&#xff0c;请求负载均衡调度方案&a…

如何将PDF文件压缩到最小?五个pdf压缩方法,一键将体积减小70%!

将pdf文件压缩得更小一点&#xff0c;不仅节省设备的存储空间&#xff0c;让电脑运行得更流畅&#xff0c;还有助于我们快速的将pdf文件分享给好友同事。 pdf压缩方法有很多&#xff0c;本文整理了几个关于电脑文件压缩的方法&#xff0c;适用于各个操作系统的电脑&#xff0c;…

已解决:VS2022安装插件提示重复,又卸载不掉的问题(”此扩展已经安装到所有适用的产品”)

本问题已得到解决&#xff0c;请看以下小结&#xff1a; 关于《VS2022扩展插件安装失败》的解决方案 记录备注报错时间2024年报错截图插件安装界面提示”此扩展已经安装到所有适用的产品”无截图 报错原因安装会扫描是否含有该插件&#xff0c;卸载则需要输入插件id解决步骤 第…

【精选】推荐6款AI网站推荐论文工具平台

在当前的学术研究和论文撰写过程中&#xff0c;AI写作工具已经成为许多学生和研究人员的重要助手。这些工具不仅能够提高写作效率&#xff0c;还能帮助解决复杂的写作问题。以下是六款推荐的AI网站&#xff0c;它们在毕业论文写作中表现尤为出色。 一、千笔-AIPassPaper 千笔-…

循环神经网络六-Pytorch中的序列化器

目录 一.梯度消失 二.梯度爆炸 三.解决梯度消失或者爆炸 四序列化器 1.nn.sequential 2.nn.BatchNormld 3.nn.Dropout 一.梯度消失 假设我们由四层神经网络&#xff0c;每一次只有一个神经元X 那么在计算它的梯度的时候就有&#xff1a;▽w1 x1f(a1)’w2f(b1)’w3*▽ou…