【特征工程】特征选择与特征学习

http://www.jianshu.com/p/ab697790090f

特征选择与特征学习

在机器学习的具体实践任务中,选择一组具有代表性的特征用于构建模型是非常重要的问题。特征选择通常选择与类别相关性强、且特征彼此间相关性弱的特征子集,具体特征选择算法通过定义合适的子集评价函数来体现。
在现实世界中,数据通常是复杂冗余,富有变化的,有必要从原始数据发现有用的特性。人工选取出来的特征依赖人力和专业知识,不利于推广。于是我们需要通过机器来学习和抽取特征,促进特征工程的工作更加快速、有效。

特征选择

特征选择的目标是寻找最优特征子集。特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化模型,协助理解数据产生的过程。
特征选择的一般过程如下图所示:

图中,(1)子集产生:按照一定的搜索策略产生候选特征子集;(2)子集评估:通过某个评价函数评估特征子集的优劣;(3)停止条件:决定特征选择算法什么时候停止;(4)子集验证:用于验证最终所选的特征子集的有效性。

特征选择的搜索策略

特征选择的搜索策略分为:完全搜索策略、启发式策略以及随机搜索策略。
特征选择本质上是一个组合优化问题,求解组合优化问题最直接的方法就是搜索,理论上可以通过穷举法来搜索所有可能的特征组合,选择使得评价标准最优的特征子集作为最后的输出,但是n个特征的搜索空间为2n,穷举法的运算量随着特征维数的增加呈指数递增,实际应用中经常碰到几百甚至成千上万个特征,因此穷举法虽然简单却难以实际应用。其他的搜索方法有启发式的搜索和随机搜索,这些搜索策略可以在运算效率和特征子集质量之间寻找到一个较好的平衡点,而这也是众多特征选择算法努力的目标。

  • 完全搜索(Complete)

    • 广度优先搜索( Breadth First Search )
      广度优先遍历特征子空间。枚举所有组合,穷举搜索,实用性不高。
    • 分支限界搜索( Branch and Bound )
      穷举基础上加入分支限界。例如:剪掉某些不可能搜索出比当前最优解更优的分支。
      其他,如定向搜索 (Beam Search ),最优优先搜索 ( Best First Search )等
  • 启发式搜索(Heuristic)

    • 序列前向选择(SFS,Sequential Forward Selection)
      从空集开始,每次加入一个选最优。
    • 序列后向选择(SBS,Sequential Backward Selection)
      从全集开始,每次减少一个选最优。
    • 增L去R选择算法 (LRS,Plus-L Minus-R Selection)
      从空集开始,每次加入L个,减去R个,选最优(L>R)或者从全集开始,每次减去R个,增加L个,选最优(L<R)。
      其他如双向搜索(BDS,Bidirectional Search),序列浮动选择(Sequential Floating Selection)等
  • 随机搜索(Random)

    • 随机产生序列选择算法(RGSS, Random Generation plus Sequential Selection)
      随机产生一个特征子集,然后在该子集上执行SFS与SBS算法。
    • 模拟退火算法( SA, Simulated Annealing )
      以一定的概率来接受一个比当前解要差的解,而且这个概率随着时间推移逐渐降低
    • 遗传算法( GA, Genetic Algorithms )
      通过交叉、突变等操作繁殖出下一代特征子集,并且评分越高的特征子集被选中参加繁殖的概率越高。
      随机算法共同缺点:依赖随机因素,有实验结果难重现。

特征选择算法

特征选择和机器学习算法两者存在紧密的联系,根据特征选择中子集评价标准和后续学习算法的结合方式可分为嵌入式(Embedded)、过滤式(Filter)和封装式(Wrapper)式三种。

嵌入式特征选择
在嵌入式特征选择中,特征选择算法本身作为组成部分嵌入到学习算法里。最典型的即决策树算法,如ID3、C4.5以及CART算
法等,决策树算法在树增长过程的每个递归步都必须选择一个特征,将样本集划分成较小的子集,选择特征的依据通常是划分后子节点的纯度,划分后子节点越纯,则说明划分效果越好,可见决策树生成的过程也就是特征选择的过程。

过滤式特征选择
过滤式特征选择的评价标准从数据集本身的内在性质获得,与特定的学习算法无关,因此具有较好的通用性。通常选择和类别相关度大的特征或者特征子集。过滤式特征选择的研究者认为,相关度较大的特征或者特征子集会在分类器上可以获得较高的准确率。过滤式特征选择的评价标准分为四种,即距离度量、信息度量、关联度度量以及一致性度量。
过滤式特征选择算法的优缺点分别是:

优点:算法的通用性强;省去了分类器的训练步骤,算法复杂性低,因而适用于大规模数据集;可以快速去除大量不相关的特征,作为特征的预筛选器非常合适。
缺点:由于算法的评价标准独立于特定的学习算法,所选的特征子集在分类准确率方面通常低于Wrapper方法。

封装式特征选择
封装式特征选择是利用学习算法的性能来评价特征子集的优劣。因此,对于一个待评价的特征子集,Wrapper方法需要训练一个分类器,根据分类器的性能对该特征子集进行评价。Wrapper方法中用以评价特征的学习算法是多种多样的,例如决策树、神经网络、贝叶斯分类器、近邻法以及支持向量机等等。
封装式特征选择算法的优缺点分别是:

优点:相对于Filter方法,Wrapper方法找到的特征子集分类性能通常更好。
缺点:Wrapper方法选出的特征通用性不强,当改变学习算法时,需要针对该学习算法重新进行特征选择;由于每次对子集的评价都要进行分类器的训练和测试,所以算法计算复杂度很高,尤其对于大规模数据集来说,算法的执行时间很长。

有效性分析

对特征的有效性进行分析,得到各个特征的特征权重,根据是否与模型有关可以分为:
1.与模型相关特征权重,使用所有的特征数据训练出来模型,看在模型中各个特征的权重,由于需要训练出模型,模型相关的权重与此次学习所用的模型比较相关。不同的模型有不同的模型权重衡量方法。例如线性模型中,特征的权重系数等。
2.与模型无关特征权重。主要分析特征与label的相关性,这样的分析是与这次学习所使用的模型无关的。
与模型无关特征权重分析方法包括(1)交叉熵,(2)Information Gain,(3)Odds ratio,(4)互信息,(5)KL散度等。

特征学习

特征学习可以分为监督特征学习和无监督特征学习:
监督特征学习包括监督字典学习、神经网络、多层感知机;无监督特征学习包括无监督字典学习、主成分分析、独立成分分析、自编码器、矩阵分解和各种形式的聚类算法。

监督特征学习

监督字典学习
字典学习是从输入数据中学习一组代表元素的字典,其中每个数据都可以表示为代表元素的加权和。通过最小化带有L1正则项的平均误差来确定字典元素和权重,并保证权重稀疏。
监督字典学习利用输入数据和标签的隐含结构来优化字典元素。

神经网络
神经网络是用来描述一系列学习算法,通过相互关联的节点构成的多层网络。它是受神经系统的启发,其中节点可以看做是神经元,边可以看成是突触。每个边都有相对应的权重,网络定义了计算规则,将数据从输入层传递到输出层。
多层神经网络可以用来进行特征学习,因为它们可以学习在隐藏层中的输出的表示。

非监督特征学习

非监督特征学习的目标是捕捉高维数据中的底层结构,挖掘出低维的特征。
K-means聚类
K-means聚类是一种矢量量化的方法,给定一组向量,K-means算法将这些数据组织成k个子集,使得每个向量属于最近的均值所在的子集。
在特征学习中,K-means算法可以将一些没有标签的输入数据进行聚类,然后使用每个类别的质心来生成新的特征。
最简单的方法是在每个输入样本中加入K个二元特征,其中当且仅当第j个质心距离采样数据最近时,第j个特征置为1。另一种方式是利用到子集的距离作为特征,或者是经过径向基函数进行转换的子集距离。

主成分分析(Principal component analysis)
主成分分析主要用于降维。给定无标签的数据集,PCA生成p个奇异值向量(p远远小于数据的维度),对应数据矩阵中p个最大的奇异值。这p个奇异值向量是从输入数据中学习的特征向量,它们代表了数据具有最大方差的方向。
PCA是一种线性特征学习方法,因为p个奇异指向量是数据矩阵的线性方程。
PCA有几点局限:首先,它假设最大方差的方向是最感兴趣的,而实际上很多应用中可能不是。PCA依赖于原始数据的正交变换,它只挖掘了数据的一阶、二阶矩,这并没有很好的表征数据分布。最后,PCA只有在输入数据向量是相关的情况下才能很好地降维。

局部线性嵌入(Local linear embedding)
局部线性嵌入(LLE)是一种非线性的非监督学习方法,用来从未标注的高维输入中生成低维的近邻保持表征。
LLE的一般思想是,通过保持原有数据集的部分集合特性的低维数据来重构原始高维数据。LLE包含两个主要步骤,第一步是近邻保持(neighbor-preserving),其中每个输入数据Xi通过K近邻数据点的加权和重构,并且通过最小化平均平方重构误差(average squared reconstruction error)找到最优权重;第二步是降维(dimension reduction),在低维空间中寻找向量,该向量使用第一步的权重可以最小化表示误差。
相比PCA,LLE对于利用数据的隐含结构能力更强大。

独立成分分析(Independent component analysis)
独立成分分析是利用独立非高斯成分的加权和学习数据表示的技术。非高斯前提的强制条件是因为当所有成分满足高斯分布时权重无法唯一确定。

无监督字典学习(Unsupervised dictionary learning)
与监督字典学习不同的是,非监督字典学习不利用数据的标签,只是利用数据的潜在结构来优化字典元素。无监督字典学习的例子是稀疏编码,它用来重无标签数据中学习用于数据表示的基函数(即字典元素)。稀疏编码可以用来学习超完备字典(overcomplete dictionary),其中字典元素的数目要远远大约输入数据的维度。K-SVD是用于从无标记数据中学习数据稀疏表示的字典。

深度学习

分层结构的神经系统启发了由简单学习模块构成的多层深度学习架构来进行特征学习。
在深度学习体系中每个中间层的输出可以看做是原始输入数据的一种表示,每层利用上一层中产生的表示作为输入,生成新的表示作为输出,提供给更高层。输入的底层是原始数据,而最终层输出的是最后的低维特征或表征。

受限玻尔兹曼机(Restricted Boltzmann Machine)
首先玻尔兹曼常常用来构建多层学习结构。它可以用包含一组二元隐含变量、一组可见变量、连接隐含节点和可见节点的边的无向二分图(undirected bipartite graph)来表示,它是无内节点连接的广义玻尔兹曼机的特例。RBM的每个边有一个权重,这些权重联系在一起定义了一个能量方程,该方程基于可见和隐含节点的联合分布。基于RBM的拓扑学,隐含变量和可见变量是条件独立的,这一特性便于RBM的计算。
RBM可以看做是无监督特征学习的一层,可见变量对应输入数据,隐含变量对应特征探测器(feature detectors)。利用对比散度算法(contrastive divergence)来最大可见变量的概率,训练权重。
一般而言,上述RBM的训练问题得到的是非稀疏的表示,而稀疏RBM,作为RBM的一种修正版本,是通过在数据似然的目标函数中添加正则化方法,来惩罚小常量中期望隐含变量的偏差。

自编码器(Autoencoder)
自编码器有编码器和解码器组成。编码器使用原始数据作为输入,生成特征或表征,解码器利用编码器抽取的特征来作为输入,重建原始输入数据并输出。编码器和解码器是由多层RBM构成。结构中的参数通过层与层的贪婪方式训练得到:在一层特征探测器学习之后,它们被提供给上层作为可见变量用于响应RBM的训练,该过程一直重复直到停止条件满足方结束。

转载请注明作者Jason Ding及其出处
Github博客主页(http://jasonding1354.github.io/)
GitCafe博客主页(http://jasonding1354.gitcafe.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)
Google搜索jasonding1354进入我的博客主页

文/JasonDing(简书作者)
原文链接:http://www.jianshu.com/p/ab697790090f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-10-14 18:24:09

【特征工程】特征选择与特征学习的相关文章

特征工程-特征选择

转自:https://www.cnblogs.com/pinard/p/9032759.html 1. 特征的来源 在做数据分析的时候,特征的来源一般有两块,一块是业务已经整理好各种特征数据,我们需要去找出适合我们问题需要的特征:另一块是我们从业务特征中自己去寻找高级数据特征.我们就针对这两部分来分别讨论. 2.  选择合适的特征 我们首先看当业务已经整理好各种特征数据时,我们如何去找出适合我们问题需要的特征,此时特征数可能成百上千,哪些才是我们需要的呢? 第一步是找到该领域懂业务的专家,让他们

Python数据挖掘—特征工程—特征选择

如何选择特征 根据是否发散及是否相关来选择 方差选择法 先计算各个特征的方差,根据阈值,选择方差大于阈值的特征 方差过滤使用到的是VarianceThreshold类,该类有个参数threshold,该值为最小方差的阈值,然后使用fit_transform进行特征值过滤 相关系数法 先计算各个特征对目标值的相关系数,选择更加相关的特征 递归特征消除法 使用一个基模型来进行多轮训练,经过多轮训练后,保留指定的特征数 通过estimator将基模型设置为线性模型(可以设置为其他类型),通过n_fea

第一章 特征工程-------------《百面机器学习》

今天打算看看<百面机器学习>,打好基础,方便日后找工作,同时也是打发最近无聊的心情(闲下来就喜欢多想导致心情terrible). 第一章    特征工程 第一节  特征归一化 Q1:为什么需要对数值的特征做归一化? A1:对数据类型的特征作归一化可以将所有的特征都统一到一个大致相同的数值区间内.避免因量纲的不同带来的影响. 最常用的方法有:1)线性函数归一化.即 对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对原始数据的等比缩放. 2)零均值归一化.将原始数据映射到均值为0,标准差

02_特征工程和文本特征提取

02 特征工程和文本特征提取 数据集的构成 数据存放形式 CSV 文件 mysql: 性能瓶颈,读取速度: 格式不符合机器学习的格式 pandas:读取工具 numpy为什么读取速度快: 动态语言 全局解释性锁 GIL : 释放了 (GIL数据安全),真正的多线程 可用的数据集 Kaggle : 大数据竞赛平台.真实数据.数据量大 UCI: 数据集覆盖科学.生活.经济等领域 Scikit-learn: 数据量小,方便学习 数据集的结构组成 结构: 特征值 + 目标值 特征工程的定义 特征工程是什

机器学习 | 特征工程- 超参数调优方法整理

特征工程是机器学习当中很重要的部分,可以帮助我们设计.创建新特征,以便模型从中提取重要相关性.本文将记录并持续更新相关特征工程的工具包介绍,包括自动模型选择和超参数调优等各方面. · Featuretools Featuretools 是一个开源的Python 库,用于自动化特征工程.自动特征工程能够缩减时间成本,构建更优秀的预测模型,生成更有意义的特征,还能防止数据泄漏(data leakage). 目标任务:从数据表格集中获取所有的数据信息并整合到一张表中,再创建特征. 解决方案:采用深度特

特征工程介绍

1. 特征定义 为了提取知识和做出预测,机器学习使用数学模型来拟合数据.这些模型将特征作为输入.特征就是原始数据某个方面的数值表示.在机器学习流程中,特征是数据和模型之间的纽带.特征工程是指从原始数据中提取特征并将其转换为适合机器学习模型的格式.它是机器学习流程中一个极其关键的环节,因为正确的特征可以减轻构建模型的难度,从而使机器学习流程输出更高质量的结果. 2. 机器学习流程 2.1 数据 数据是对现实世界的现象的观测. 2.2 任务 收集数据的原因. 2.3 模型 数据的数学模型描述了数据不

机器学习 特征工程之特征选择

概念 首先看一下维基百科中关于特征选择的介绍: 在机器学习和统计学中,特征选择 也被称为变量选择.属性选择 或变量子集选择 .它是指:为了构建模型而选择相关特征(即属性.指标)子集的过程. 在机器学习中,每个特征对于目标类别的影响并不相同,所以需要从特征集中挑选出一组最具统计意义的特征子集,把其他无用数据删掉,达到降维的目的. 特征选择的目标是寻找最优特征子集.特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目

机器学习之(四)特征工程以及特征选择的工程方法

关于特征工程(Feature Engineering),已经是很古老很常见的话题了,坊间常说:"数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已".由此可见,特征工程在机器学习中占有相当重要的地位.在实际应用当中,可以说特征工程是机器学习成功的关键.纵观Kaggle.KDD等国内外大大小小的比赛,每个竞赛的冠军其实并没有用到很高深的算法,大多数都是在特征工程这个环节做出了出色的工作,然后使用一些常见的算法,比如LR,就能得到出色的性能.遗憾的是,在很多的书籍中并没有直接

特征工程学习01-sklearn单机特征工程

特征工程学习01-sklearn单机特征工程 小书匠 kindle 0.数据的导入 from sklearn.datasets import load_iris #导入IRIS数据集  iris=load_iris()  #特征矩阵  print(iris.data[:5],len(iris.data))  #目标向量  print(iris.target[:5],len(iris.target))  [[ 5.1 3.5 1.4 0.2] [ 4.9 3. 1.4 0.2]  [ 4.7 3.