机器学习:特征工程笔记

在实践中,收集到的数据往往是不完整、含有噪声和不一致的,这对模型的性能构成挑战,因为其很大程度上依赖于输入数据的质量,因此,特征工程应运而生。特征工程是数据预处理和机器学习的重要环节,包括从原始数据中选择创建转换特征。


目录

主要内容

1.数据清洗

1.1 缺失值处理

1.2 异常值处理

1.3 去除重复项

1.4 数据一致性和格式规范化

2.特征选择

2.1 过滤法(Filter Methods)

2.2 包裹法(Wrapper Methods)

2.3 嵌入法(Embedded Methods)

3.特征构造

3.1 组合现有特征

3.2 应用专业知识

3.3 交互特征

3.4 多项式特征

3.5 时间序列数据的特征构造

4.特征转换

4.1 标准化(Standardization)

4.2 归一化(Normalization)

4.3 对数转换(Log Transformation)

4.4 幂变换(Power Transformation)

4.5 分箱(Binning)

4.6 布尔转换

4.7 编码

5.降维

5.1 主成分分析(PCA)

5.2 线性判别分析(LDA)


主要内容


1.数据清洗

对原始数据进行缺失值处理、异常值处理和去除重复项等操作,为后续分析奠定基础

1.1 缺失值处理

缺失值是数据集中常见的问题,处理缺失值的方法主要有以下几种:

删除:直接删除含有缺失值的行或列。这种方法简单直接,但当缺失数据较多时,可能会导致大量信息的丢失。

填充:使用某种策略填充缺失值,包括:

①使用平均数、中位数或众数等统计量填充缺失值;

②使用更复杂的方法,如基于模型的预测(如K最近邻、回归模型)来估计缺失值;

③使用向前或向后填充,如时间序列数据。

1.2 异常值处理

异常值(Outliers)是指在数据集中明显偏离其他观测值的数值。它们可能由于测量错误、数据录入错误和变异等原因产生。

识别异常值:

①标准差法:当数据服从正态分布,通常将超过平均值±2或3个标准差的数据点视为异常值;

②四分位数(IQR)法:IQR = Q3 - Q1。通常将 [Q1 - 1.5IQR,Q3 + 1.5IQR] 以外的数据点视为异常值;

③箱式图法:绘制 box 显示数据分布情况,基于上、下四分位数直观地识别异常值;

④Z-score法:将数据点换算成 Z-score:Z-score = (数据点 - 均值) / 标准差。把 |Z-score| > 2 or 3的数据点视为异常值。

处理异常值:

①删除;

②修正:包括使用平均值、中位数替换,分箱处理,模型预测值替代;

③保留:在某些情况下,异常值可能代表了重要的信息,需要保留。

1.3 去除重复项

数据集中可能存在重复的记录,这些重复项可能会导致模型训练时的偏差。常用 Python中的Pandas库 检测和删除重复项。

1.4 数据一致性和格式规范化

保证数据的一致性和标准化,主要涉及:

格式:确保所有数据遵循相同的格式,如日期和时间格式统一,文本的大小写统一等。

数据类型:确保每列数据的类型正确,如将数字类型的数据从字符串转换为整数或浮点数。



2.特征选择

从原始数据中选择最有用的特征,以减少模型的复杂性和提高模型的性能。特征选择可以提高模型的训练效率,并减少模型过拟合的风险。主要方法有:

2.1 过滤法(Filter Methods)

在模型训练前,根据统计性质选择特征,与最终学习器的性能无关。该方法通过分析每个特征与目标变量之间的相关性,选择与目标变量最相关的特征。包括:

相关系数:使用皮尔逊相关系数、斯皮尔曼等级相关系数等方法来衡量连续特征与目标变量的相关性。

卡方检验:用于分类问题,检验类别变量与目标变量的独立性。

互信息和最大信息系数:评估变量之间的相互依赖性,不仅限于线性关系。

2.2 包裹法(Wrapper Methods)

在模型训练后,直接以最终学习器的性能作为特征的评价标准。该方法通过选择不同的特征子集,训练模型,并评估模型性能,以此决定哪些特征被选中。有:

序列特征选择算法:有向前选择、向后消除和双向搜索算法。每次操作都选择使模型性能最优化的特征。

2.3 嵌入法(Embedded Methods)

在模型训练中,通过学习算法自身的运行步骤选择特征,即算法自身包含特征选择步。包括:

基于惩罚项的特征选择方法:如L1正则化(Lasso)和L2正则化(Ridge)等。L1正则化能够将不重要的特征的系数压缩为0,从而实现特征的选择。

决策树:如随机森林、梯度提升树(Gradient Boosting Machines, GBM)等,它们在构建树的过程中评估特征的重要性。



3.特征构造

从现有数据中创造新特征,需结合专业知识与数据特征。特征构造可以揭示数据中隐藏的信息。常见方法有:

3.1 组合现有特征

对现有特征进行数学转换(如加减乘除、取对数等)来创造新特征。例如:在流行病学研究中,发病密度(Incidence Density)用于衡量在特定时间段内新发病例发生速率的方法,新特征——发病密度 就可以通过 新发病例数 和 总观察人时间 计算。

发病密度 = \frac{新发病例数}{总观察人时间} 

3.2 应用专业知识

应用专业知识创造出有意义的特征。例如:在医学领域,收集到一组人群的核酸检测结果,其中 CT值(阈值循环数,表示检测到病毒RNA所需的PCR循环次数)是一项计量特征,研究人员根据专业知识,把 CT值 转换为 二分类特征(核酸检测阳性、阴性)。

3.3 交互特征

将两个或多个特征组合在一起,应用于特征间存在复杂关系的情形。例如:在线性模型中,如果怀疑两个特征A和B之间存在交互作用,可以通过添加一个新特征 A*B 让模型学习这种关系。

3.4 多项式特征

通过将特征提升到更高的次方或创建特征的多项式组合来增加模型的复杂度和灵活性。适用于捕捉特征之间的非线性关系。

3.5 时间序列数据的特征构造

从时间维度提取信息,这些信息可以帮助模型理解数据随时间的变化趋势、周期性、季节性等特征。常用的时间序列特征构造方法有:

滞后特征(Lag Features):引入过去的观测值作为新特征。例如:使用前一天(或多天)的数据作为今天的预测输入。适用于捕捉时间序列的自相关性。

滑动窗口统计(Rolling Window Statistics):计算过去一段时间内的统计量(如均值、中位数、最大值、最小值、标准差等)作为特征。帮助模型捕捉到时间序列的短期趋势和波动。

时间分解特征:将时间戳分解为多个独立的组件(如年、月、日、周几、是否为节假日等)。有助于模型理解并利用时间序列的季节性和周期性。

傅里叶变换特征:通过傅里叶变换提取时间序列的频域特征,捕捉周期性变化。特别适用于处理具有明显周期性的时间序列。



4.特征转换

通过各种数学变换,处理偏斜数据、规范数据范围、转换非线性关系等。常见方法有:

4.1 标准化(Standardization)

使特征的均值为0,标准差为1。适用于大多数机器学习算法,尤其是基于梯度下降的算法(如线性回归、逻辑回归、神经网络)和包含距离计算的算法(如K-近邻、支持向量机)。

4.2 归一化(Normalization)

将特征的数值范围缩放到一个指定的范围,通常是0到1之间,或者是-1到1之间。通过将特征值减去最小值然后除以最大值与最小值的差来实现。应用场景:当数据包含多个特征且特征的尺度差异较大时。

4.3 对数转换(Log Transformation)

处理右偏(正偏)分布的数据,将其转换为接近正态分布。适用于处理具有长尾或极端值的特征,可以减少偏斜程度,使模型更稳定。

4.4 幂变换(Power Transformation)

减少数据的偏斜程度,改善特征与目标变量的线性关系。包括:平方、立方、平方根、立方根等。适用于当对数转换无法有效减少数据偏斜或当数据中包含零和负值时使用。

4.5 分箱(Binning)

将连续变量转换为分类变量,或者将多个类别合并成更少的类别。有助于减少噪声、处理异常值、简化模型和提高模型的泛化能力,在决策树中应用广泛。

4.6 布尔转换

选择一个阈值,特征值大于阈值的映射为1,否则为0。

4.7 编码

将类别特征转换为数值,常见方法有:独热编码(One-Hot Encoding)和标签编码(Label Encoding)



5.降维

通过减少数据集中的特征数量来简化模型,旨在减轻维度灾难、提高算法效率,同时尽可能保留原始数据的重要信息。常见方法有:

5.1 主成分分析(PCA)

原理:通过线性变换将原始数据变换为一组各维度线性无关的表示,称为主成分,主成分按照方差递减的顺序排列。

应用:用于连续数据的降维,常见于图像处理、数据可视化等领域。

优点:能够去除数据中的噪声,简化数据结构。

缺点:线性PCA可能不适用于解决非线性数据问题。

5.2 线性判别分析(LDA)

原理:旨在将数据投影到较低维度空间,同时保持不同类别数据的可分性最大化。

应用:常用于有监督的降维任务,如模式与信号分类。

优点:可以用于特征抽取,同时保留类别间最大的判别性。

缺点:需要预先知道标签信息,适用于分类问题而不是回归问题。


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

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

相关文章

sheng的学习笔记-docker部署数据库oracle,mysql

部署目录:sheng的学习笔记-部署-目录-CSDN博客 docker基础知识可参考 sheng的学习笔记-docker部署,原理图,命令,用idea设置docker docker安装数据库 mac版本 安装oracle 下载oracle镜像 打开终端,输入 docker s…

服务器被黑,安装Linux RootKit木马

前言 疫情还没有结束,放假只能猫家里继续分析和研究最新的攻击技术和样本了,正好前段时间群里有人说服务器被黑,然后扔了个样本在群里,今天咱就拿这个样本开刀,给大家研究一下这个样本究竟是个啥,顺便也给…

gem5学习(17):ARM功耗建模——ARM Power Modelling

目录 一、Dynamic Power States 二、Power Usage Types 三、MathExprPowerModels 四、Extending an existing simulation 五、Stat dump frequency 六、Common Problems 官网教程:gem5: ARM Power Modelling 通过使用gem5中已记录的各种统计数据,…

Java:字符集、IO流 --黑马笔记

一、字符集 1.1 字符集的来历 我们知道计算机是美国人发明的,由于计算机能够处理的数据只能是0和1组成的二进制数据,为了让计算机能够处理字符,于是美国人就把他们会用到的每一个字符进行了编码(所谓编码,就是为一个…

《CSS 简易速速上手小册》第3章:CSS 响应式设计(2024 最新版)

文章目录 3.1 媒体查询基础:网页的智能眼镜3.1.1 基础知识3.1.2 重点案例:适应三种设备的响应式布局3.1.3 拓展案例 1:改变字体大小3.1.4 拓展案例 2:暗模式适配 3.2 响应式图片和视频:让内容自由呼吸3.2.1 基础知识3.…

猫头虎分享已解决Bug | Go Error: cannot use str (type string) as type int in assignment

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

【linux系统体验】-archlinux简易折腾

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化2.4 桌面面板美化 三、问题总结3.1 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤: 磁盘分区安装 Linux内核配置系统&#xff…

git revert回退某次提交

请直接看原文: 【git revert】使用以及理解(详解)_git revert用法-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 试验得知:用Reset HEAD方…

【开源】基于JAVA+Vue+SpringBoot的实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

寒假作业:2024/2/11

作业1&#xff1a;使用递归实现n! 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> int fun(int n) {if(0n){return 1;}else{return n*fun(n-1);} } int main(int argc, const char *argv[]) {int n;printf("please en…

从左值和右值的角度分析a++和++a

摘自牛客上的一个题目&#xff1a; int a5,则 (a)的值是? 答案是会编译报错。 原因&#xff1a; a返回的是右值(rvalue)&#xff0c;而我们不能对一个右值进行自增操作。所以(a)会报错。 怎么理解呢&#xff1f; &#xff08;a)返回的是a在1之前的值&#xff0c;这个值是一个…

###C语言程序设计-----C语言学习(11)#数据的存储和基本数据类型

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 一. 数据的存储 1.整型数据的存储 计算机处理的所有信息都以二进制形式表示…

【人工智能教育】“奇幻森林里的决战:小明‘剑’指期末,勇闯试卷迷宫

在智慧校园的奇幻乐园中&#xff0c;教育的故事不再局限于传统的粉笔与黑板&#xff0c;而是跃然于光影之间&#xff0c;流淌于数据之海。小明和他的同学们正是这个新世界的探险者&#xff0c;他们手握名为“智能辅导助手”的魔法棒&#xff0c;勇闯知识的迷宫。每当他们在力学…

电子电器架构 —— 对车载软件开发新阶段的愿景

电子电器架构 —— 对车载软件开发新阶段的愿景 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝…

Github 2024-02-07 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-07统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Rust项目2TypeScript项目2Python项目2Ruby项目1HTML项目1NASL项目1Go项目1C项目1Svelte项目1C项目1 React Nat…

华为 huawei 交换机 接口 MAC 地址学习限制接入用户数量 配置示例

目录 组网需求: 配置思路&#xff1a; 操作步骤&#xff1a; 配置文件&#xff1a; 组网需求: 如 图 2-14 所示&#xff0c;用户网络 1 和用户网络 2 通过 LSW 与 Switch 相连&#xff0c; Switch 连接 LSW 的接口为GE0/0/1 。用户网络 1 和用户网络 2 分别属于 VLAN10 和 V…

优质项目追踪平台一览:助力项目管理与监控

项目追踪平台是现代项目管理中不可或缺的工具&#xff0c;它可以帮助团队高效地跟踪和管理项目进度、任务和资源分配。在当今快节奏的商业环境中&#xff0c;有许多热门的项目追踪平台可供选择。 本文总结了当下热门的项目追踪平台&#xff0c;供您参考~ 1、Zoho Projects&…

【MySQL】-18 MySQL综合-4(MySQL储存引擎精讲+MySQL数据类型简介+MySQL整数类型+MySQL小数类型)

MySQL储存引擎精讲MySQL数据类型简介MySQL整数类型MySQL小数类型 十一 MySQL存储引擎精讲11.1 什么是存储引擎11.2 MySQL 5.7 支持的存储引擎11.3 如何选择 MySQL 存储引擎11.4 MySQL 默认存储引擎 十二 MySQL数据类型简介12.1 MySQL 常见数据类型1) 整数类型2) 日期/时间类型3…

Spring Cloud Hystrix 参数配置、简单使用、DashBoard

Spring Cloud Hystrix 文章目录 Spring Cloud Hystrix一、Hystrix 服务降级二、Hystrix使用示例三、OpenFeign Hystrix四、Hystrix参数HystrixCommand.Setter核心参数Command PropertiesFallback降级配置Circuit Breaker 熔断器配置Metrix 健康统计配置Request Context 相关参数…

部分意图分类【LLM+RAG】

在生成人工智能领域工作最有价值的事情之一就是发现新兴技术如何融入新的解决方案。 举个例子&#xff1a;在为北美顶级金融服务公司之一设计对话式人工智能助手时&#xff0c;WillowTree 的数据和人工智能研究团队 (DART) 发现&#xff0c;将意图分类与大型语言模型 (LLM) 结合…