特征抽取、特征选择、特征工程

2024-06-15 17:18

本文主要是介绍特征抽取、特征选择、特征工程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(更新于2019/03/02)

注意:关于这三个名词的概念,网上的一些内容并不是非常权威,当然也有人对这方面的内容做了比较详细的区分,所以看这部分内容的时候就需要仔细甄别,多看不同的内容。

1. 引言

在机器学习的流程中,如图1所示,这是一个完整的循环,针对一个特定的机器学习问题,这个循环应该是一直进行的,直到你对整个的模型性能满意的时候。

图1 机器学习流程[1]

因为现在已经存在了很多开源库,对于机器学习的算法和模型评估部分,都可以自动化的完成。在这种情况下,大部分时间为了解决一个问题,都是在特征工程上:怎么样构建特征,怎么样最大化利用原始数据,怎么样在这个步骤最大化后面模型的性能。
在最近的实践过程中,也发现很多时候我不是在思考算法,而是希望先将数据进行清理,然后转化成可以利用的形式,最后才是算法。可能真正用于测试算法的实践仅占整个流程的20%。 不算模型调优的过程,在项目初期,先把这个流程走通,大部分时间都是花费在对数据进行处理上。
这篇随笔就记录下特征工程以及特征抽取、特征选择的定义等。

2. 定义

从众多的文章中挑选了两篇[2][3]比较认可的关于这方面的定义。这两篇定义方面的内容一样的,但他们出现在不同的地方。一开始的时候看了这两篇文章,觉得应该是对了;后面看的多了才发现这里也是不对的。[2][3]文章估计是一个人写的,或者有人抄过来的,所以不要相信。

特征抽取与特征工程:将原始数据转化为可以用来建模的特征;
特征抽取:从原始数据集中抽取到新的特征空间,也是降维过程;
特征转换:将特征进行转换,以提高准确率;
特征选择:移除不必要的特征;

下面分别来解释一下:

  1. 我认为特征工程应该是包含包含特征抽取的,他们共同的目的都是从原始数据中,通过背景知识,提取出可以用来建模的特征;但特征工程感觉上做的工作要别特征抽取要多;特征工程是希望得到的特征更有意义。(个人认为这两个可以混为一谈,即使有些书上也都没有非常明确的规定)
  2. 特征转化
    这个词跟归一化相关。
  3. 特征选择
    直观理解,从一组特征中,选择出对模型的更有利的,涉及一些评价的参数,常用的有相关系数这种;这种过程最终生成的特征子集,他的特征意义是不变的。
    还有一个常用是降维过程,比如PCA算法(这个应该算是特征抽取过程),但特征选择也算是一种降维的过程。

p.s. 正如开头所说,关于这方面,网上的内容很多都有些不是很正式,前面只是我的理解。完整的定义,应该看文章[4],只不过他的特征工程部分的内容不够丰富,更像是前期预处理的部分内容。更丰富的,可以看知乎上的答案[5]。特征工程应该涵盖特征选择和特征抽取,毕竟这个名字在这里摆着,我就是要针对特征做事情嘛;然后比较重要的一方面,他在开始的利用与问题相关的背景知识,将数据转化为可以用的特征,比如自然语言处理过程,语音处理过程等。

简单粗暴一点,特征抽取是将原始空间映射到新的空间,创造了新的特征变量,改变了原始的特征;特征选择是从原始子集中筛选与类别相关的变量,只是对变量空间进行了缩小。


文章[6]的话非常有启发性,在高维空间中,人无法去定位各个变量,你希望从低维的空间中找到解释的观点,这就是特征抽取;特征选择就是你还在原始空间中,只不过去除了一些无用的变量;他们统称为特征降维。

4. 常用的方法

文章[4]中,对这部分的内容进行了描述,后面对这部分内容进行记录。文章[10]也对这个部分的内容进行了介绍。

5. 如何与交叉验证结合

关于特征选择和特征抽取的过程数据集是如何选择的。
https://stats.stackexchange.com/questions/64825/should-feature-selection-be-performed-only-on-training-data-or-all-data
其中提到了nested cross validation.

这个主题的内容貌似非常重要,而且我印象中好像的确很多人都犯了这种错误,不管是在kaggle上,还是在论文里。
具体的形式化描述是这样的,假设要做一个预测分类的问题。
1)首先我在整个数据集上进行了特征选择的过程;
2)然后我利用交叉验证来测试这个过程是不是有效提高;
本上这种做法就是错误的[7],这样的做法会使整个性能的估计是有偏的[8](这个说法我还不太明白,还需要进一步来学习)。正确的做法应该是:
在分出来的每一小部分数据中,再做一次交叉验证。
文章[9]特别提出应该将特征选择作为模型选择一样对待。文章[7]同样提到了对于无监督的特征选择过程是不用在CV中执行的。
(这个问题,牵扯到的东西太多了,包括交叉验证到底干了什么,还有最后特征选择的时候选择的哪一部分,所以这个东西还是需要好好系统的学习)但这里也引入了一个问题,这样我最后特征选择出来的特征集应该是哪些。我这个问题就跟我前面好奇的最后选择交叉验证那个模型一样,可能最后就是选择在全部数据集上的内容。


这部分内容看了很久,感觉越看越迷糊,就先不看了,后面还是要看比较权威的书来的快。

引用

[1]gui-fying-the-machine-learning-workflow-towards-rapid-discovery-of-viable-pipelines
[2]Feature selection vs Feature extraction. Which to use when?
[3]pen-machine-learning-course-topic-6-feature-engineering-and-feature-selection
[4]getting-data-ready-for-modelling-feature-engineering-feature-selection-dimension-reduction
[5]特征工程到底是什么
[6]数据降维(特征提取)和特征选择有什么区别?
[7]not-perform-feature-selection
[8]Feature selection and cross-validation
[9]An Introduction to Feature Selection
[10]使用sklearn做单机特征工程
[11]Getting Data ready for modelling: Feature engineering, Feature Selection, Dimension Reduction (Part two)
(https://towardsdatascience.com/getting-data-ready-for-modelling-feature-engineering-feature-selection-dimension-reduction-39dfa267b95a)

这篇关于特征抽取、特征选择、特征工程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064076

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

二、Maven工程的创建--JavaSEJavaEE

1、idea创建Maven JavaSE工程:  2、idea创建Maven JavaEE工程:   (1)手动创建 (2)插件方式创建 在idea里安装插件JBLJavaToWeb; 选择需要生成的项目文件后,右击: 项目的webapp文件夹出现小蓝点,代表成功。

HalconDotNet中的图像特征与提取详解

文章目录 简介一、边缘特征提取二、角点特征提取三、区域特征提取四、纹理特征提取五、形状特征提取 简介   图像特征提取是图像处理中的一个重要步骤,用于从图像中提取有意义的特征,以便进行进一步的分析和处理。HalconDotNet提供了多种图像特征提取方法,每种方法都有其特定的应用场景和优缺点。 一、边缘特征提取   边缘特征提取是图像处理中最基本的特征提取方法之一,通过检

三、Maven工程的构建

首先,创建和构建是两个概念。 构建是指将源代码、依赖库和资源文件等转换为可执行或可部署的应用程序的过程。 在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中至关重要的一部分,它能够大大提高软件开发效率,使得开发人员更加专注于应用程序的开发和维护,而不必关心应用程序的构建细节。 同时,项目构建还能将多人写的代码聚合,并能够自动化项目的构建和部署,

我在高职教STM32——准备HAL库工程模板(1)

新学期开学在即,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过更换库就意味着教学内容有很大变化,自己也就迟迟没有迈出调整这一步。现在,是时候做出变化了,笔者计划保持教学项

java工程的导入jar包

由于现在学习java web,java工程导入jar包都忘记了。 在此想记录一下:工程项目名:右击 -- Build Path --add External Archives 点击会弹出一个框 ,选择你要导入的jar路径就可以了。

WebShell流量特征检测_哥斯拉篇

90后用菜刀,95后用蚁剑,00后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对后三款经典的webshell管理工具进行流量分析和检测。 什么是一句话木马? 1、定义 顾名思义就是执行恶意指令的木马,通过技术手段上传到指定服务器并可以正常访问,将我们需要服务器执行的命令上传并执行 2、特点 短小精悍,功能强大,隐蔽性非常好 3、举例 php一句话木马用php语言编写的,运行