美文网首页数据分析
机器学习之特征工程

机器学习之特征工程

作者: 尼小摩 | 来源:发表于2017-11-17 14:53 被阅读333次

    目录大纲

    • 特征工程是什么?
    • 特征工程的重要性
    • 特征工程子问题:
      1.特征处理
      2.Feature Selection(特征选择)
      3.Feature Extraction(特征提取)
      4.Feature construction(特征构造)

    特征工程的思维导图:

    如果浏览,建议下载到本地查看

    特征工程是什么?

    想要预测模型性能达到最佳时,你要做的不仅是要选取最好的算法,还要尽可能的从原始数据中获取更多的信息。应该如何为预测模型得到更好的数据呢?
    简而言之,特征工程就是一个把原始数据转变成特征的过程,这些特征可以很好的描述这些数据,并且利用它们建立的模型在未知数据上的表现性能可以达到最优(或者接近最佳性能)。

    特征工程的重要性

    坊间常说:“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。

    首先,我们大家都知道,数据特征会直接影响我们模型的预测性能。你可以这么说:“选择的特征越好,最终得到的性能也就越好”。这句话说得没错,但也会给我们造成误解。事实上,你得到的实验结果取决于你选择的模型、获取的数据以及使用的特征,甚至你问题的形式和你用来评估精度的客观方法也扮演了一部分。此外,你的实验结果还受到许多相互依赖的属性的影响,你需要的是能够很好地描述你数据内部结构的好特征。

    (1)特征越好,灵活性越强:
    只要特征选得好,即使是一般的模型(或算法)也能获得很好的性能,因为大多数模型(或算法)在好的数据特征下表现的性能都还不错。好特征的灵活性在于它允许你选择不复杂的模型,同时运行速度也更快,也更容易理解和维护。

    (2)特征越好,构建的模型越简单:
    有了好的特征,即便你的参数不是最优的,你的模型性能也能仍然会表现的很nice,所以你就不需要花太多的时间去寻找最有参数,这大大的降低了模型的复杂度,使模型趋于简单。

    (3)特征越好,模型的性能越出色
    显然,这一点是毫无争议的,我们进行特征工程的最终目的就是提升模型的性能。

    特征工程子问题

    特征工程主要包括:

    • 特征处理
    • Feature Selection(特征选择)
    • Feature Extraction(特征提取)
    • Feature construction(特征构造)

    1. 特征处理

    特征处理分类

    特征处理分为:数值型,类别型,时间型,文本型,统计型和组合特征

    1)数值型
    • 幅度调整,归一化:幅度常控制在[0,1]
    • 离散化:连续值分段变成类别型,1个值映射为一个向量,离散化后引入非线性,如年龄为变量,可让老人和小孩同时获得高权重
    2)类别型
    • one-hot编码/哑变量:如小孩,青年,老人->[1,0,0],[0,1,0],[0,0,1]

    • hash分桶(类别很多,较稀疏):

      • 例1:使用聚类将userId根据某些特征分为几类
      • 例2:如下图是将一个词典分成三个桶,每个桶可能代表某个领域内的词,两句话如果在同一个同中出现的单词数相同,可能说明他们在某一领域内指代性相同,为每句话构造了一个新向量


        hash分桶
    • Histogram映射:把某个特征与target做后验关联度的统计,以统计量表示该特征

      • 例子:如特征-男/女,target-爱好,统计P(爱好|性别),得到 男:[1/3,2/3,0],可表示男生1/3喜欢散步,2/3喜欢足球,没有喜欢看电视剧;用爱好比例对性别进行编码,得到的统计特征之间map到特征向量中,可以与原性别特征[1,0]同时存在

    3)时间型

    • 时间型特征可分为数值型和类别型,时间型数据可以表示不同时间人们心态和行为存在差别,可用于区分人群,商品推荐等
    • 数值型:网页停留时间,上次浏览离现在间隔时间
    • 类别型:月、周、日、时等

    4)文本型

    • 词袋(去停用词)、word2vec

    • TF-IDF权重

      :表示一个词对一个样本或样本集的重要程度

      • TF(w)=(词w在当前文中出现的次数)/(w在全部文档中出现的次数)
      • IDF(w)=ln(总文档数/含w的文档数)
      • TF-IDF权重: TF*IDF

    5) 统计型

    • 统计特征与业务的契合度高
    • 加减平均:商品价格超平均价格,连续登陆天数超平均,商品出售超平均编码
    • 分位线:商品价格分位线体现用户的购买能量
    • 次序型、比例型

    6)组合型

    • 拼接型:如userId&&category拼接可以为某个用户创建个性化特征
    • 模型特征组合:如GBDT产出的特征组合路径,路径命中为1,否则为0
    • 组合特征和原始特征一起放进LR中训练

    2. 特征选择 Feature Selection

    为什么做特征选择:

    在机器学习的实际应用中,特征数量往往较多,其中可能存在不相关的特征,特征之间也可能存在相互依赖,容易导致如下的后果:

    • 特征个数越多,分析特征、训练模型所需的时间就越长。
    • 特征个数越多,容易引起“维度灾难”,模型也会越复杂,其推广能力会下降。

    特征选择能剔除不相关(irrelevant)或亢余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化了模型,使研究人员易于理解数据产生的过程。
    数据预处理完成之后,我们需要选择有意义的特征,输入机器学习的算法和模型进行训练,通常来说,从两个方面考虑来选择特征:

    • 是否发散
    • 是否相关

    特征选择的三种方法:

    1. Filter方法

    其主要思想是:对每一维的特征“打分”,即给每一维的特征赋予权重,这样的权重就代表着该维特征的重要性,然后依据权重排序。它主要侧重于单个特征跟目标变量的相关性。
    优点:计算时间上较高效,对于过拟合问题也具有较高的鲁棒性。
    缺点:倾向于选择冗余的特征,因为他们不考虑特征之间的相关性,有可能某一个特征的分类能力很差,但是它和某些其它特征组合起来会得到不错的效果。

    主要的方法有:

    • Variance selection (方差选择法)

    使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。

    • Chi-squared test (卡方检验)

    经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量:

    卡方检验
     不难发现,这个统计量的含义简而言之就是自变量对因变量的相关性
    • information gain (信息增益)

    经典的互信息(信息增益)也是评价定性自变量对定性因变量的相关性的,互信息计算公式如下:


    信息增益公式

    2. Wrapper方法

    其主要思想是:将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个优化问题,这里有很多的优化算法可以解决,尤其是一些启发式的优化算法,如GA,PSO,DE,ABC等;详见“优化算法——人工蜂群算法(ABC)”,“ 优化算法——粒子群算法(PSO) ”。

    wrapper方法实质上是一个分类器,封装器用选取的特征子集对样本集进行分类,分类的精度作为衡量特征子集好坏的标准,经过比较选出最好的特征子集。常用的有逐步回归(Stepwise regression)、向前选择(Forward selection)和向后选择(Backward selection)。
    优点:考虑了特征与特征之间的关联性
    缺点:当观测数据较少时容易过拟合,而当特征数量较多时,计算时间又会增长。

    主要方法有:

    recursive feature elimination algorithm(递归特征消除算法)

    递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。

    3. Embedded方法

    其主要思想是:在模型既定的情况下学习出对提高模型准确性最好的属性。这句话并不是很好理解,其实是讲,在确定模型的过程中,挑选出那些对模型的训练有重要意义的属性。

    主要方法:

    • 基于惩罚项的特征选择法
    • 基于树模型的特征选择法
    • 降维

    当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。

    3. 特征提取 Feature Extraction

    原则上来讲,特征提取应该在特征选择之前。特征提取的对象是原始数据(raw data),它的目的是自动地构建新的特征,将原始特征转换为一组具有明显物理意义(Gabor、几何特征[角点、不变量]、纹理[LBP HOG])或者统计意义或核的特征。比如通过变换特征取值来减少原始数据中某个特征的取值个数等。对于表格数据,你可以在你设计的特征矩阵上使用主要成分分析(Principal Component Analysis,PCA)来进行特征提取从而创建新的特征。对于图像数据,可能还包括了线或边缘检测。

    常用的方法有:

    • PCA (Principal component analysis,主成分分析)
    • ICA (Independent component analysis,独立成分分析)
    • LDA (Linear Discriminant Analysis,线性判别分析)
    • 对于图像识别中,还有SIFT方法。

    4. 特征构造 Feature construction

    特征构建指的是从原始数据中人工的构建新的特征。我们需要人工的创建它们。这需要我们花大量的时间去研究真实的数据样本,思考问题的潜在形式和数据结构,同时能够更好地应用到预测模型中。

    特征构建需要很强的洞察力和分析能力,要求我们能够从原始数据中找出一些具有物理意义的特征。假设原始数据是表格数据,一般你可以使用混合属性或者组合属性来创建新的特征,或是分解或切分原有的特征来创建新的特征。

    总结

    参考资料

    [1]From 参考美团的"机器学习中的数据清洗与特征处理综述"
    [2]From特征工程与模型调优

    相关文章

      网友评论

        本文标题:机器学习之特征工程

        本文链接:https://www.haomeiwen.com/subject/evslvxtx.html