数据预处理在建模中的重要性与常见方法(三):特征工程篇

数据预处理在建模中的重要性与常见方法):特征工程篇

特征工程是数据预处理中至关重要的一步,通过构建、转换和选择最能代表数据特性的特征,以提高模型的性能和准确性。常见的特征工程方法包括特征选择、特征提取和特征编码。

1. 特征选择

特征选择是从原始特征中选择最有用的特征,以减少模型的复杂性,防止过拟合,提高模型的泛化能力。常用的方法有过滤法、包裹法和嵌入法。

(1)过滤法

方差选择法:

·  应用场景:适用于特征数量较多且计算资源有限的场景,如文本分类和基因数据分析。

·  优点:简单高效,易于实现。

·  缺点:忽略了特征之间的相关性。

(2)包裹法

·  递归特征消除(RFE): 通过递归训练模型,消除权重最小的特征:

通过递归训练模型,消除权重最小的特征}通过递归训练模型,消除权重最小的特征

·  应用场景:适用于中小规模数据集的特征选择,如医疗数据和营销数据。

·  优点:考虑了特征之间的相互作用。

·  缺点:计算复杂度高,耗时较长。

(3)嵌入法

Lasso回归:

·  应用场景:适用于高维数据的特征选择,如金融数据和生物信息数据。

·  优点:能够同时进行特征选择和模型训练。

·  缺点:对参数的选择较为敏感。

2. 特征提取

特征提取是通过对原始数据进行变换,生成新的特征,以便更好地捕捉数据中的信息。常用的方法有主成分分析(PCA)和线性判别分析(LDA)。

(1)主成分分析(PCA)

·  其中,W是特征向量矩阵。

·  应用场景:适用于高维数据降维,如图像处理和信号处理。

·  优点:能够减少数据维度,保留数据的主要信息。

·  缺点:难以解释提取的特征,丢失部分信息。

(2)线性判别分析(LDA)

·  其中,W是最大化类间方差与类内方差比的投影矩阵。

·  应用场景:适用于带有类别标签的数据降维,如模式识别和图像分类。

·  优点:考虑了类别信息,提高了分类性能。

·  缺点:仅适用于线性可分的数据。

3. 特征编码

特征编码是将分类变量转换为数值变量,使其能够被机器学习算法处理。常用的方法有One-Hot编码和标签编码。

(1)One-Hot编码

·  其中,1的位置对应x_i的类别。

·  应用场景:适用于无序分类变量的编码,如颜色、城市等。

·  优点:简单直观,保留了类别的独立性。

·  缺点:对高基数特征会导致维度爆炸。

(2)标签编码

·  应用场景:适用于有序分类变量的编码,如评级、等级等。

·  优点:节省内存,适合树模型。

·  缺点:可能引入类别之间的顺序关系。

对应的具体代码实现

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.feature_selection import VarianceThreshold, SelectFromModelfrom sklearn.linear_model import Lassofrom sklearn.decomposition import PCAfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDAfrom sklearn.preprocessing import OneHotEncoder, LabelEncoderplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False# 生成示例数据np.random.seed(0)X = pd.DataFrame({'feature1': np.random.randn(100),'feature2': np.random.randn(100),'feature3': np.random.choice(['A', 'B', 'C'], 100)})y = np.random.choice([0, 1], 100)# 特征选择 - 方差选择法selector = VarianceThreshold(threshold=0.1)X_var = selector.fit_transform(X[['feature1', 'feature2']])# 特征提取 - PCApca = PCA(n_components=1)X_pca = pca.fit_transform(X[['feature1', 'feature2']])# 特征提取 - LDAlda = LDA(n_components=1)X_lda = lda.fit_transform(X[['feature1', 'feature2']], y)# 特征编码 - One-Hot编码encoder = OneHotEncoder()X_onehot = encoder.fit_transform(X[['feature3']]).toarray()# 特征编码 - 标签编码label_encoder = LabelEncoder()X_label = label_encoder.fit_transform(X['feature3'])# 可视化fig, axs = plt.subplots(2, 2, figsize=(12, 12))# 方差选择法axs[0, 0].scatter(X_var[:, 0], X_var[:, 1], c=y)axs[0, 0].set_title('方差选择法')# PCAaxs[0, 1].scatter(X_pca, np.zeros_like(X_pca), c=y)axs[0, 1].set_title('主成分分析(PCA)')# LDAaxs[1, 0].scatter(X_lda, np.zeros_like(X_lda), c=y)axs[1, 0].set_title('线性判别分析(LDA)')# One-Hot编码axs[1, 1].imshow(X_onehot[:10], aspect='auto', cmap='viridis')axs[1, 1].set_title('One-Hot编码')plt.tight_layout()plt.show()

对应的可视化结果

更多干货内容:

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

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

相关文章

零基础入门鸿蒙开发 HarmonyOS NEXT星河版开发学习

今天开始带大家零基础入门鸿蒙开发,也就是你没有任何编程基础的情况下就可以跟着石头哥零基础学习鸿蒙开发。 目录 一,为什么要学习鸿蒙 1-1,鸿蒙介绍 1-2,为什么要学习鸿蒙 1-3,鸿蒙各个版本介绍 1-4&#xff0…

P4-AI产品经理-九五小庞

从0开始做AI产品的完整工作方法 项目启动 项目实施 样本测试模型推荐引擎 构建DMP(数据管理平台) 项目上线

Leetcode双指针法应用

1.双指针法 文章目录 1.双指针法1.1什么是双指针法?1.2解题思路1.3扩展 1.1什么是双指针法? 双指针算法是一种在数组或序列上操作的技巧,实际上是对暴力枚举算法的一种优化,通常涉及到两个索引(或指针)从两…

springboot实现接口请求日志自动生成(日志自动埋点)

文章目录 1.作用:2.原理:3.代码:一.config层二. mq层 :三.service层: 4.效果图5.声明 1.作用: springboot接口请求日志自动生成,实现接口日志自动埋点生成 1.统一日志生成格式;—方便查看 2.汇…

19-4 LLM之野望 4 - 探索大模型的量化

什么是模型量化? 从本质上讲,模型量化就是为了提高效率。想象一下,你有一本非常厚的教科书(就像那些老式百科全书一样),需要整天随身携带。很累吧?现在,如果你能把它缩小到一本漫画…

Postgresql导入几何数据的几种方式

postgis方式导入 1.直接使用postgis客户端方式导入 首先,电脑要安装postgresql和对应版本的postgis。然后通过postgis客户端软件连接到postgresql数据库。然后导入。具体详细操作如下所示: 第一步:首先要再postgis中创建数据库 Create da…

怎样在 PostgreSQL 中进行用户权限的精细管理?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中进行用户权限的精细管理?一、权限管理的重要性二、PostgreSQL 中的权…

Linux云计算 |【第一阶段】ENGINEER-DAY2

主要内容: 磁盘空间管理fdisk、parted工具、开机自动挂载、文件系统、交换空间 KVM虚拟化 实操前骤: 1)添加一块硬盘(磁盘),需要关机才能进行操作,点击左下角【添加硬件】 2)选择2…

Lamp 小白菜鸟从入门到精通

前言 “LAMP包”的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流&#xff0…

2.0.PyTorch神经网络基础

层和块 块(block)可以描述单个层、由多个层组成的组件或整个模型本身。 使用块进行抽象的一个好处是可以将一些块组合成更大的组件, 这一过程通常是递归的。多个层被组合成块,形成更大的模型: #层 import torch from …

LeetCode做题记录(第二天)169. 多数元素

题目:169. 多数元素 标签:数组 哈希表 分治 计数 排序 题目信息: 思路一: 在题目中出现了计数,那我们就可以直接考虑考虑使用哈希表 unordered_map 即遍历的时候记录每个数的出现次数,当出现次数大于n/…

苍穹外卖跟练项目前端localhost打不开页面启动nginx报错[alert] could not open error log file问题解决

一、安装路径为纯英文 查看自己的安装路径是否为纯英文环境,刚开始下载的资料包是有中文路径的,要将资料包中的nginx-1.20.2文件夹复制一份然后粘贴到一个新建的纯英文的目录,我这里装到的是 D:\Program Files\nginx-1.20.2 二、删掉logs文件…

【AI学习】关于Scaling Law的相关学习

一、苦涩的教训 首先,学习一段重要话语: The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin. 从70年的人工智能研究中…

C语言 ——— 浮点数类型 在 内存中 的 存储模式

目录 浮点数存储规则 单\双精度浮点数 存储 S、M、E 的布局 有效数字M 和 指数位E 的特殊规定 浮点数在内存中是否存储的S、M、E 浮点数存储规则 根据国际标准IEEE754(电气和电子工程协会)规定:任意一个 浮点数F的二进制 都可以表示成…

<数据集>铁轨缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:844张 标注数量(xml文件个数):844 标注数量(txt文件个数):844 标注类别数:3 标注类别名称:[Spalling, Squat, Wheel Burn] 序号类别名称图片数框数1Spalling3315522…

【ProtoBuf】通讯录实现(网络版)

Protobuf 还常用于通讯协议、服务端数据交换场景。那么在这个示例中,我们将实现一个网络版本的通讯录,模拟实现客户端与服务端的交互,通过 Protobuf 来实现各端之间的协议序列化。 需求如下: 客户端可以选择对通讯录进行以下操…

达梦数据库 DISQL连接数据库与执行SQL、脚本的方法

DISQL连接数据库与执行SQL、脚本的方法 1.DISQL介绍2.DISQL连接数据库的方法2.1 本地连接2.2 远程连接2.3 CONN连接 3.执行SQL、脚本的方法3.1 通过DISQL登录后在字符界面3.2 启动DISQL时运行脚本3.3 进入DISQL后,通过start命令运行脚本3.4 使用EDIT命令编辑脚本 1.…

【中项】系统集成项目管理工程师-第3章 信息技术服务-3.1内涵与外延与3.2原理与组成

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

OV7670寄存器读出0x00或0xFF

文章目录 问题描述原因分析解决方案 问题描述 OV7670的输出图像异常,怀疑寄存器没有正确配置,在SignalTap中观察到SIO_D在读出阶段一直为高或低 寄存器读出0x00 寄存器读出0xFF 原因分析 在确保电源、时钟和读写时序没有问题的情况下,有…

PCB系统学习(1)--PCB印制电路板

PCB印制电路板 1.1PCB的定义1.2PCB的层叠结构1.2.1PCB单层板1.2.2PCB双层板1.2.3PCB四层板 1.3PCB的通孔,盲孔,埋孔1.4元器件的符号与封装1.5PCB的生产过程 1.1PCB的定义 PCB(PrintedCircuitBoard),中文即印制电路板,或印刷线路板…