热门标签 | 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


推荐阅读
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 本文通过复旦大学自然语言处理课程中的一个具体案例,详细解析了中文词汇分割技术的实现方法。该案例利用Java编程语言,结合词典和算法模型,展示了如何高效地进行中文文本的词汇分割,为相关研究和应用提供了宝贵的参考。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 探讨 jBPM 数据库表结构设计的精要与实践
    探讨 jBPM 数据库表结构设计的精要与实践 ... [详细]
  • 第三届人工智能、网络与信息技术国际学术会议(AINIT 2022)
    20223rdInternationalSeminaronArtificialIntelligence,NetworkingandInformationTechnology第三届 ... [详细]
  • 原文:http:blog.csdn.netdamotianshengarticledetails406284171.Knn算法介绍:百度百科:http:baike.b ... [详细]
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社区 版权所有