机器学习之特征工程

news2025/1/10 16:13:23

一、背景

什么是特征?在机器学习中,特征是一个现象的个别可测量的属性或特征。让我们观察一束阳光,直接看的话,它是白光,但是我们使用三菱镜,它就是七种颜色的光。所以,选取的事物的特征不同,我们观测的结果就会不一样。

二、定义

  • 特征工程(Feature Engineering)特征工程是将原始数据转化成更好的表达问题本质的特征的过程,使得将这些特征运用到预测模型中能提高对不可见数据的模型预测精度。
  • 特征工程简单讲就是发现对因变量y有明显影响作用的特征,通常称自变量x为特征,特征工程的目的是发现重要特征。
  • 如何能够分解和聚合原始数据,以更好的表达问题的本质?这是做特征工程的目的。

三、特征工程的流程

 四、特征设计原理

新特征设计应与目标高度相关,要考虑的问题:

  1. 这个特征是否对目标有实际意义?
  2. 如果有用,这个特征重要性如何?
  3. 这个特征的信息是否在其他特征上体现过?

新构建特征验证其有效性要考虑的问题:

  1. 需要领域知识、直觉、行业经验以及数学知识综合性考量特征的有效性,防止胡乱构造没有意义的特征。
  2. 要反复与模型进行迭代验证其是否对模型有正向促进作用。
  3. 或者进行特征选择判定新构建特征的重要性来衡量其有效性。

五、特征转换

通常情况下,合理的数据变换能帮助现有模型更好的理解样本中的信息。比如年龄特征,收入特征等数据参差不齐,需要做离散化,分为老,中,幼,高收入,中等收入,低收入等。

连续数据离散化

有些时候我们需要对数据进行粗粒度、细粒度划分,以便模型更好的学习到特征的信息,比如:

  • 粗粒度划分(连续数据离散化):将年龄段0~100岁的连续数据进行粗粒度处理,也可称为二值化或离散化或分桶法
  • 细粒度划分:在文本挖掘中,往往将段落或句子细分具体到一个词语或者字,这个过程称为细粒度划分

方法

  • 特征二值化

设定一个划分的阈值,当数值大于设定的阈值时,就赋值为1;反之赋值为0。典型例子:划分年龄段

  • 无监督离散化

分箱法:等宽(宽度)分箱法、等频(频数)分箱法 聚类划分:使用聚类算法将数据聚成几类,每一个类为一个划分

典型例子

年龄、收入

优缺点

优点:(1)降低数据的复杂性 (2)可在一定程度上消除多余的噪声

离散数据编码化

很多算法模型不能直接处理字符串数据,因此需要将类别型数据转换成数值型数据

方法

  • 序号编码

通常用来处理类别间具有大小关系的数据,比如成绩(高中低)

  • 独热编码(One-hot Encoding)

通常用于处理类别间不具有大小关系的特征,比如血型(A型血、B型血、AB型血、O型血), 独热编码会把血型变成一个稀疏向量,A型血表示为(1,0,0,0),B型血表示为(0,1,0,0), AB型血表示为(0,0,1,0),O型血表示为(0,0,0,1)

  • 二进制编码

二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。 以A、B、AB、O血型为例,A型血表示为00,B型血表示为01, AB型血表示为10,O型血表示为11

优缺点

缺点:有些模型不支持离散字符串数据,离散编码便于模型学习

函数变换法

方法 简单常用的函数变换法(一般针对于连续数据):平方(小数值—>大数值)、开平方(大数值—>小数值)、指数、对数、差分

典型例子

对时间序列数据进行差分

数据不呈正态分布时可运用

当前特征数据不利于被模型捕获时

优缺点

优点:

  1. 将不具有正态分布的数据变换成具有正态分布的数据
  2. 对于时间序列分析,有时简单的对数变换和差分运算就可以将非平稳序列转换成平稳序列
.算术运算构造法

根据实际情况需要,结合与目标相关性预期较高的情况下,由原始特征进行算数运算而形成新的特征。

解读概念为几种情况:

  1. 原始单一特征进行算术运算:类似于无量纲那样处理,比如:X/max(X), X+10等
  2. 特征之间进行算术运算:X(featureA)/X(featureB),X(featureA)-X(featureB)等
自由发挥

在特征构造这一块是没有什么明文规定的方法,特征构造更多的是结合实际情况,有针对性的构造与目标高度相关的特征,只要构造的新特征能够解释模型和对模型具有促进作用,都可以作为新指标新特征。

六、特征选择

从哪些方面来选择特征呢?

当数据处理好之后,我们需要选择有意义的特征输入机器学习的模型进行训练,通常来说要从两个方面考虑来选择特征,如下:

1、特征是否发散

如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。

2、特征与目标的相关性

这点比较显见,与目标相关性高的特征,应当优先选择。

区别:特征与特征之间相关性高的,应当优先去除掉其中一个特征,因为它们是替代品。

为什么要进行特征选择?

  1. 减轻维数灾难问题; 2. 降低学习任务的难度

处理高维数据的两大主流技术

特征选择和降维

特征选择有哪些方法呢?

  1. Filter 过滤法
  2. Wrapper 包装法
  3. Embedded 嵌入法

七、总结

特征工程做的好,后期的模型调参更容易甚至不用调参,模型的稳定性,可解释性也要更好。如果特征工程做得不好,模型评估怎么调参都调不到理想的效果,那么就需要大量消耗时间继续重复处理、筛选特征,直到模型达到理想的效果。

参考:

深度了解特征工程 - 知乎

特征工程完全手册 - 从预处理、构造、选择、降维、不平衡处理,到放弃 - 知乎

工作台 - Heywhale.com

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

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

相关文章

能赚钱的GPT Store正式上线!如何将自己的 GPT 放到商店中?

等了两个月,OpenAI 的 GPT Store 今日凌晨终于上线!上线 GPT Store 的同时,OpenAI 同步了最新的 GPTs 数据:截止到1月11日,用户已创建300万的GPTs! GPTs 开发者可以通过 GPTs 来获利。OpenAI 将在今年第一季…

PLECS如何下载第三方库并导入MOSFET 的xml文件,xml库路径添加方法及相关问题

1. 首先xml库的下载,PLECS提供了一个跳转的链接。 https://www.plexim.com/download/thermal_models 2. 下载一个库(以最后一个Wolfspeed为例,属于CREE的SiC MOSFET) 下载这个就行,都包含了。不信自己可以试试再下载…

java物品检验管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 物品检验管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysq…

C++里main函数int main(int argc, char **argv)

C里main函数int main(int argc, char **argv), 这两个参数argc和argv分别是什么

免费申请eu.org域名,开启个人网站之旅

介绍 eu.org的免费域名注册服务是由OpenTLD B.V.提供的。相比于其他免费域名注册服务,eu.org的域名后缀更加独特。同时,eu.org的域名注册也比较简单,只需要填写一些基本信息,就可以获得自己的免费域名。 注册账号 点击进入登…

C#中的Abp项目发布后,将exe设置为开机自动启动

一.跳过登陆界面 1.win R,输入“regedit”进入注册表,点开“HKEY_LOCAL_MACHINE” 2.SOFTWARE–>Policies–>Microsoft–>Windows–>新建–>项–>Personalization,新建–>DWORD(32位),名字定位“NoLockScreen”,值设为…

【JaveWeb教程】(20) MySQL数据库开发之 基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询 详细代码示例讲解

目录 1. 数据库操作-DQL1.1 介绍1.2 语法1.3 基本查询1.4 条件查询1.5 聚合函数1.6 分组查询1.7 排序查询1.8 分页查询1.9 案例1.9.1 案例一1.9.2 案例二 在上次学习的内容中,我们讲解了: 使用DDL语句来操作数据库以及表结构(数据库设计&…

java通过HttpClient方式实现https请求的工具类(绕过证书验证)

目录 一、引入依赖包二、HttpClient方式实现的https请求工具类三、测试类 一、引入依赖包 引入相关依赖包 <!--lombok用于简化实体类开发--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><option…

生骨肉冻干推荐测评|希喂、VE、百利、PR等多款热门生骨肉冻干测评

随着养猫的观念逐渐科学化&#xff0c;越来越多的铲屎官开始关注猫咪主食的健康和营养问题。 冻干因其模拟猫咪原始捕猎猎物模型配比、低温加工的特点&#xff0c;被认为是最符合猫咪饮食天性的选择。 相比传统的膨化猫粮&#xff0c;生骨肉冻干中的淀粉和碳水化合物添加较少…

Electron中调用dll

截止目前Electron的官方稳定版本已经更新到了28.1.1。我在创建Electron项目时用的28.0.0版本&#xff0c;后面在项目中有用到调用dll方法的需求&#xff0c;大致的实现就是将后端给的dll文件引入到项目中&#xff0c;安装ffi-napi依赖&#xff0c;然后进行使用。但是在Electron…

行为型模式 | 观察者模式

一、观察者模式 1、原理 观察者模式又叫做发布-订阅&#xff08;Publish/Subscribe&#xff09;模式&#xff0c;定义了一种一对多的依赖关系。让多个观察者对象同时监听某一个主题对象&#xff0c;这个主题对象在状态上发生变化时&#xff0c;会通知所有观察者对象&#xff0…

idea 设置文件头

idea 设置创建文件时自动添加文档注释信息 /** * Description * Author jimaomao * DATE ${DATE} ${TIME} */

【【ZYNQ基础模块串口的意义】】

ZYNQ基础模块串口的意义 ZYNQ的配置介绍 如此纯粹的引脚显示 DDR 用来接DDR FIXED_IO 主要用来调试 现在一步一步配置出PS与PL端想沟通的zynq核 第一步给PL端添加一个时钟 因为 PS 与 PL端的时钟晶振不一样 我们可以通过一个PLL 来帮助我们生成想要实现的PL端时钟 第二步…

ROS2——Parameters

节点可以使用参数来配置各项操作&#xff0c;这些参数可以说布尔值、整数、字符串等类型。节点在启动时会读取参数。我们将参数单独列出来&#xff0c;而不是写在源文件中&#xff0c;这样做可以方便我们调试&#xff0c;因为在不同的机器人、环境中&#xff0c;我们需要的参数…

应用案例 | 基于三维机器视觉的焊接件上料解决方案

在制造业中&#xff0c;还有许多传统的焊接自动化设备主要是通过人工来进行上料。 传统的上料过程中&#xff0c;主要是通过人工来进行的。上料过程中会收到人为因素的影响&#xff0c;如操作人员的技能水平、工作态度等&#xff0c;导致上料不准确&#xff0c;不稳定&#xff…

面试宝典之JVM优化

J01、类加载的几个过程&#xff1f; 加载、验证、准备、解析、初始化。然后是使用和卸载了 J02、Minor GC 与 Full GC 分别在什么时候发生&#xff1f; 新生代内存不够用时候发生 MGC 也叫 YGC&#xff0c;JVM 内存不够的时候发生 FGC J03、java 中垃圾收集的方法有哪些? …

计算机速成课Crash Course - 18. 操作系统

今天继续计算机速成课Crash Course的系列讲解。 更多技术文章&#xff0c;全网首发公众号 “摸鱼IT” 锁定 -上午11点 - &#xff0c;感谢大家关注、转发、点赞&#xff01; 计算机速成课Crash Course - 17. 集成电路&摩尔定律 18. 操作系统 1940,1950 年代的电脑&#…

【PaperReading】3. PTP

Category Content 论文题目 Position-guided Text Prompt for Vision-Language Pre-training Code: ptp 作者 Alex Jinpeng Wang (Sea AI Lab), Pan Zhou (Sea AI Lab), Mike Zheng Shou (Show Lab, National University of Singapore), Shuicheng Yan (Sea AI Lab) 另一篇…

Elasticsearch安装Windows版

目录 1.&#xff1a;下载安装包&#xff0c;选择指定的版本&#xff0c;这里选择了7.8.0&#xff0c;官网下载地址&#xff1a; ​编辑 2&#xff1a;下载好之后解压&#xff0c;解压之后是这样的&#xff1a; 3&#xff1a;配置环境变量&#xff0c;跟JDK一样&#xff0c;…

odoo16 销售中订单价格的设置

odoo16 销售中订单价格的设置 产品设置好销售价格后&#xff0c;在建销售订单时&#xff0c;却不显价格&#xff0c;需在设置中把价格表选上 不选客户时&#xff0c;价格表显示空白 每次如何设置默认价格呢&#xff0c;如你去改程序或其它法&#xff0c;就不对了&#xff0c…