热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习:特征工程、特征提取、特征选择与数据降维间的关系

所属知识点:MachineLearning:FeatureEngineering归纳和总结机器学习技术的库:ViolinLeeML_not

所属知识点:Machine Learning:Feature Engineering 
归纳和总结机器学习技术的库:ViolinLee/ML_notes。该库主要内容是我的机器学习笔记,同时挑选和收集各类与机器学习技术相关的高质量资源,欢迎大家关注和Star!会一直更新下去。
使用滴滴云AI大师码【0212】消费GPU有9折优惠哦!



(1)基础概念
       特征(Feature):特征是所有独立单元共享的属性,是进行分析或预测的对象。只要对模型有用,任何属性都可以是特征。在某个问题背景下,特征(而不是属性)的目的将更容易理解。“A feature is a characteristic that might help when solving the problem”,我认为这句话的内涵是:特征只有在某个具体需要解决的问题下讨论才具有意义。

       特征的重要性:数据中的特征对预测模型(predictive models)十分重要,并且会影响将要实现的结果。特征的质量和数量对模型的好坏有很大影响。“特征越好,结果越好”这并非完全正确,因为结果还取决于模型和数据,而不仅仅是所选的特征。但选择正确的特征仍非常重要。更好的特征可以产生更简单、更灵活的模型,并且通常会产生更好的结果。
       DataRobot首席数据科学家、在2012-2013年Kaggle榜上排名第一的Xavier Conort曾说过,团队使用的算法在Kagglers中是十分常规的。他们将大多数精力花在特征工程上。他们也非常小心地放弃了可能会使模型产生过拟合的特征。“一些机器学习项目成功了而另外一些却失败了,是什么导致了这种差别呢?很简单,最关键的因素出现在他们所使用的特征上 ”,《主算法》作者Pedro Domingos的回答更为直接。

      特征相关性(Feature relevance):关于某个具体特征,它可能是强相关的(即该特征具有任何其他特征中不存在的信息)、相关的、弱相关的(包含其他特征的某些信息)或不相关的。创建大量特征是很重要的,后续可以使用特征选择来防止过拟合。

       特征爆炸(Feature explosion):功能组合(Feature combinations)或特征模板(Feature templates)都可能导致功能爆炸,这两种情况都可能导致特征数量快速增长。有一些解决方案可以帮助避免特征爆炸,例如:正则化(regularization)、内核方法(kernel method)、特征选择(feature selection)。

(2)特征工程
       特征工程是利用数据的领域知识来创建提供给机器学习算法训练的特征的过程。特征工程是机器学习应用的基础,既困难又昂贵。自动特征学习可以避免手工特征工程的需要。特征工程是一个非正式的话题,但在应用机器学习中却被认为是必不可少的,因为原始数据中通常有大量的特征,这是不可能全部处理的。特征工程消除了噪声,提高了模型的精度。它优化了训练过程,推理过程,消除了过拟合。Andrew Ng曾说过:“创造特征是很困难的,即耗时,还需要专业知识。‘应用机器学习’基本上是特征工程”。
       特征工程的流程:


  1. 头脑风暴;
  2. 决定创建哪些特征;
  3. 创建特征;
  4. 检查特征如何与模型一起工作;
  5. 必要时改进特征;
  6. 回到头脑风暴创建更多特征,直到工作完成。

      特征工程常见手段:


  • 注入领域知识
  • 创建交互功能
  • 合并稀疏类
  • 添加虚拟变量
  • 删除无用的特征

      自动特征工程:自动特征工程已成为学术界研究的一个新兴课题。2015年,麻省理工学院的研究人员提出了深度特征合成算法(Deep Feature Synthesis algorithm),并证明了其在在线数据科学竞赛中的有效性,该算法击败了615/906个人类团队。IBM的研究人员表示,自动特征工程“有助于数据科学家缩短数据探索时间,使他们能够在短时间内尝试并错误地提出许多想法。另一方面,它使不熟悉数据科学的非专家能够快速地从他们的数据中提取价值,只需花费很少的精力、时间和成本。”

(3)特征提取:
       在机器学习、模式识别和图像处理中,特征提取从最初的一组测量数据开始,构建旨在提供信息且非冗余的派生值(特征),以促进后续的学习和泛化过程。在某些情况下,特征还能产生更好的、人类能够理解的解释。特征提取是一个降维过程,将原始变量的初始集合降维至更易于管理的组别(特征)进行处理,同时仍然准确、完整地描述原始数据集。
       当一个算法的输入数据太大而不便处理,并且可能是冗余时(例如,不同单位下的相同测量),则可以将其转换为一组简化的特征(也称为特征向量)。确定初始特征子集称为特征选择。所选特征将包含来自输入数据的相关信息,因此可以使用这种简化的表示来执行所需的任务,而不是使用完整的初始数据。
       特征提取包括减少描述一组大数据所需的资源量。在对复杂数据进行分析时,主要问题之一是涉及的变量数量。对大量的变量进行分析通常会占用大量内存和计算能力,同时也可能导致分类算法对训练样本过拟合,难以泛化到新样本。特征提取是构造变量组合以解决上述问题的方法的一个通用术语,同时特征提取仍然以足够的精度描述数据。许多机器学习实践者认为,适当优化的特征提取是构建有效模型的关键。
       使用构建的依赖于应用的特征集合(通常由专家构建)可以改进结果,一种这样的过程称为特征工程。或者,也可以使用通用的降维技术,例如:


  • 独立成分分析 Independent component analysis (ICA)
  • 等距映射 Isomap
  • 核主成分分析 Kernel PCA
  • 潜在语义分析 Latent semantic analysis
  • 偏最小二乘 Partial least squares ( PLS) 
  • 主成分分析 Principal component analysis(PCA)
  • 多因子降维法 Multifactor dimensionality reduction
  • 非线性降维 Nonlinear dimensionality reduction
  • Multilinear Principal Component Analysis
  • Multilinear subspace learning
  • Semidefinite embedding(SDE)
  • 自动编码器 Autoencoder

       特征提取的实际应用包括:


  • Autoencoder — 自动编码器的作用是以无监督方式学习有效的数据编码。利用特征提取技术,通过学习原始数据集的编码,得到新的编码特征,从而识别编码数据中的关键特征。
  • Bag-of-Words — 一种自然语言处理技术,提取句子、文档、网站等使用的单词(特征),并按使用频率对其进行分类。这种技术也可以应用于图像处理。
  • Image Processing — 用于检测数字图像或视频中的形状、边缘或运动等特征的算法。

(4)特征选择
       在机器学习和统计中,特征选择,又称变量选择、属性选择或变量子集选择,是选择相关特征(变量、预测器)子集用于模型构造的过程。简要地说就是:检测相关特征,摒弃冗余特征,获得特征子集,从而以最小的性能损失更好地描述给出的问题。(注意:这里的相关指的是单个特征的Relevant,而不是特征间的Correlation。)
       使用特征选择技术主要有四个原因:① 简化模型,使研究人员/用户更容易理解这些模型;② 缩短训练时间;③避免维数灾难(the curse of dimensionality);④ 通过减少过拟合来增强泛化能力。
       使用特征选择技术的前提是,数据包含一些冗余(Redundant) 或不相关(Irrelevant)的特征,因此可在不造成大量信息丢失的情况下删除这些特征。冗余和不相关是两个截然不同的概念,一个相关特征在与另一个相关特征强相关的情况下可能是冗余的。
       应将特征选择与特征提取区分开来。特征提取根据原始特征的功能创建新特征,而特征选择返回特征的子集。特征选择技术常用于特征多、样本(或数据点)相对较少的领域。应用特征选择的典型案例包括对文字和DNA微阵列数据的分析,其中有成千上万的特征和几十到数百个样本。

(5)数据降维
       指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数f:x\rightarrow y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的或隐式的、线性的或非线性的。
       关于数据降维详见后续文章。



       读到这里,大家对特征工程、特征提取、特征选择应该有了一些认识。但是对它们之间的区别和联系可能还是不太清晰的。事实上,在介绍上述概念的时候,有些内容已经谈到了它们之间的联系,我也特意有用下划线标注主来。
       总的来说,三者的特点如下:


  • 特征工程:从已有数据中创建新的特征;注入领域知识。
  • 特征提取:将原始数据转换为特征,会创建新特征;降维过程;
  • 特征选择:选择特征子集;不创建新特征。

       可以看出,特征工程和特征提取都是将原始数据转换为适合建模的特征,有些情况下可以互换概念,但特征提取更注重数据降维。特征选择不创建新特征,注重删除无用特征。有时候还会看到特征转换(Feature transfomation),它属于数据转换,目的是提高算法的精度。特征提取主要用在图像、信号处理和信息检索领域,在这些领域,模型精确度比模型可解释性要重要;特征选择主要用于数据挖掘,如文本挖掘,基因分析和传感器数据处理。为了更直观地体现区别联系,下面给出一些例子:
       ① 特征提取和特征工程(从中提取出信息)


  • 文本(ngrams、word2vec、tf-idf)
  • 图像(CNN)
  • 地理空间数据(经纬度)
  • 日期和时间(日、月、周、年)
  • 时间序列、网络
  • 数据降维

       ② 特征选择(基于选择的特征构建模型)


  • 统计方法
  • 交叉验证
  • 特征加权算法(ReliefF)

       ③ 特征转换(转换为有意义的)


  • 规范化和改变分布(例如缩放)
  • 交互作用
  • 填写缺失值(中间值填充等)


Resources & References
资源及参考  

[1] WikiPedia. Feature engineering,Feature extraction,Feature selection
[2] DeepAI. Feature Extraction
[3] scikit-learn docs. Preprocessing (Feature extraction and normalization)
[4] Data Science Primer. Feature Engineering
[5] Open Machine Learning Course. Topic 6. Feature Engineering and Feature Selection


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 用友深耕烟草行业25年,提出数字化转型建议
    本文介绍了用友在烟草行业深耕25年的经验,提出了数字化转型的建议,包括总体要求、主要任务、发展阶段和六位一体推进举措。通过数字化转型,烟草行业将注入新动能,实现高质量发展。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
author-avatar
winnie198808616
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有