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

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

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

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,一经查实,立即删除!

相关文章

5、PostgreSQL之数据定义

PostgreSQL之数据定义 1、表基础 关系型数据库中的一个表非常像纸上的一张表:它由行和列组成。列的数量和顺序是固定的,并且每一列拥有一个名字。行的数目是变化的,它反映了在一个给定时刻表中存储的数据量。 每一列都有一个数据类型。数据…

零基础入门鸿蒙开发 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.汇…

Redis 压缩列表与快速列表

Redis 压缩列表(Ziplist) Redis 的压缩列表(Ziplist)是一种用于存储小数据集的高效数据结构,特别适合于具有较小和相似数据长度的情况。它主要用于节省内存和提高性能。下面是关于 Redis 压缩列表的详细介绍&#xff…

恶补,正态分布

正态分布的公式如下: φ μ , σ 1 2 π σ ⋅ e − ( x − μ ) 2 2 σ 2 , x ∈ ( − ∞ , ∞ ) \varphi_{\mu,\sigma}\frac{1}{\sqrt{2\pi}\sigma}\cdot e^{-\frac{(x-\mu)^2}{2\sigma^2}},x\in(-\infty,\infty) φμ,σ​2π ​σ1​⋅e−2σ2(x−μ)2​,x∈…

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

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

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

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

【关于使用swoole的知识点整理】

目录 (1)Swoole 如何理解,能解决你项目中的哪些痛点? (2)Swoole里的协程是什么,怎么用?为什么协程可以提高并发? (3)简述Swoole有哪些优点&…

怎样在 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文件…

centos5离线安装git

1、首先下载安装包 下载地址1: https://src.fedoraproject.org/repo/pkgs/git/git-2.26.2.tar.xz/sha512/5d92d07b171c5cd6e89a29c1211c73c1c900cd51c74d690aebfb4a3d0e93b541b09b42b6d6a1a82f5c3d953096771f9a8605c63be139f559f58698c1a0eabcfc/ 下载地址2&#xf…

【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的二进制 都可以表示成…

Java练习05

tip: 在Java中,^ 运算符是用于按位异或(XOR)操作的,而不是用于指数运算。 要进行指数运算,你需要使用 Math.pow() 方法。可以接收两个double类型的参数。 public static double pow(double a, double b)…