机器学习(二十一)— 特征工程、特征选择、归一化方法

  特征工程:特征选择,特征表达和特征预处理。

1、特征选择

  特征选择也被称为变量选择和属性选择,它能够自动地选择数据中目标问题最为相关的属性。是在模型构建时中选择相关特征子集的过程。

  特征选择与降维不同。虽说这两种方法都是要减少数据集中的特征数量,但降维相当于对所有特征进行了重新组合而特征选择仅仅是保留或丢弃某些特征,而不改变特征本身。 
降维常见的方法有PCA,SVD,萨蒙映射等,特征选择是丢弃作用小的特征。

  为什么要做特征选择?

  在有限的样本数目下,用大量的特征来设计分类器计算开销太大而且分类性能差。通过特征选取,删选掉冗余重复的和不相关的特征来进一步降维,获取尽可能小的特征子集,模型仅需少量的样本就可以得到较高的预测准确率。特征选择可以移除那些重复冗余、无关的特征,利于构建复杂度更低、解释性更强的模型。  

  1、去除冗余和不相关的特征,减少了特征维度,有利于提高模型的预测能力,构建效率更高的模型。2、更好地理解数据生成的过程,模型的解释性更强。

  特征选择方法有很多,一般分为三类:

  (1)第一类Filter(过滤法)比较简单,它按照特征的发散性或者相关性指标对各个特征进行评分,即给每一维的特征赋予权重,这样的权重就代表着该维特征的重要性,然后依据权重排序。设定评分阈值或者待选择阈值的个数,选择合适特征。

  使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征,即去除取值变化小的特征。

  卡方检验,经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量。拿观察的现象推测结果。用方差来衡量某个观测频率和理论频率之间差异性的方法。

  个人经验是,在没有什么思路的 时候,可以优先使用卡方检验和互信息、信息增益来做特征选择。

  (2)第二类是Wrapper(包装法),根据目标函数,通常是预测效果评分,每次选择部分特征,或者排除部分特征。

  将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题,这里有很多的优化算法可以解决,尤其是一些启发式的优化算法。一般我们会在不同的子集上构建模型,再利用模型的预测准确率来对不同的特征子集打分。搜索方法可以是随机式的,例如随机爬山法,也可以是启发式的,例如前向迭代和反向迭代。

  (3)第三类Embedded(嵌入法)则稍微复杂一点,它先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征。类似于过滤法,但是它是通过机器学习训练来确定特征的优劣,而不是直接从特征的一些统计学指标来确定特征的优劣。

  正则化,回归模型,SVM,决策树,随机森林。

  其中回归模型学习,越是重要的特征在模型中对应的系数就会越大,而跟输出变量越是无关的特征对应的系数就会越接近于0。

  正则化L1正则化将系数w的l1范数作为惩罚项加到损失函数上,由于正则项非零,这就迫使那些弱的特征所对应的系数变成0。因此L1正则化往往会使学到的模型很稀疏(系数w经常为0),这个特性使得L1正则化成为一种很好的特征选择方法。L1正则化像非正则化线性模型一样也是不稳定的,如果特征集合中具有相关联的特征,当数据发生细微变化时也有可能导致很大的模型差异。

  L2正则化将系数向量的L2范数添加到了损失函数中。由于L2惩罚项中系数是二次方的,这使得L2和L1有着诸多差异,最明显的一点就是,L2正则化会让系数的取值变得平均。对于关联特征,这意味着他们能够获得更相近的对应系数。L2正则化对于特征选择来说一种稳定的模型,不像L1正则化那样,系数会因为细微的数据变化而波动。所以L2正则化和L1正则化提供的价值是不同的,L2正则化对于特征理解来说更加有用:表示能力强的特征对应的系数是非零。

  随机森林,是一种非常流行的特征选择方法,它易于使用,一般不需要feature engineering、调参等繁琐的步骤,并且很多工具包都提供了平均不纯度下降方法。它的两个主要问题,1是重要的特征有可能得分很低(关联特征问题),2是这种方法对特征变量类别多的特征越有利(偏向问题)。

  GBDT,梯度提升树。

  在Kaggle之类的算法竞赛中,高分团队主要使用的方法除了集成学习算法,剩下的主要就是在高级特征上面做文章。所以寻找高级特征是模型优化的必要步骤之一。当然,在第一次建立模型的时候,我们可以先不寻找高级特征,得到以后基准模型后,再寻找高级特征进行优化。

    寻找高级特征最常用的方法有:

    若干项特征加和: 我们假设你希望根据每日销售额得到一周销售额的特征。你可以将最近的7天的销售额相加得到。
    若干项特征之差: 假设你已经拥有每周销售额以及每月销售额两项特征,可以求一周前一月内的销售额。
    若干项特征乘积: 假设你有商品价格和商品销量的特征,那么就可以得到销售额的特征。
    若干项特征除商: 假设你有每个用户的销售额和购买的商品件数,那么就是得到该用户平均每件商品的销售额。

  当然,寻找高级特征的方法远不止于此,它需要你根据你的业务和模型需要而得,而不是随便的两两组合形成高级特征,这样容易导致特征爆炸,反而没有办法得到较好的模型。个人经验是,聚类的时候高级特征尽量少一点,分类回归的时候高级特征适度的多一点。

2、特征表达

  即如果对某一个特征的具体表现形式做处理。主要包括缺失值处理,特殊的特征处理比如时间和地理位置处理,离散特征的连续化和离散化处理,连续特征的离散化处理几个方面。

3、特征预处理

  (1)归一化:

  0、为什么一些机器学习模型需要对数据进行归一化?

  1)归一化后加快了梯度下降求最优解的速度;2)归一化有可能提高精度。

  有哪些方法:

  z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化。具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-mean)/std来代替原特征。这样特征就变成了均值为0,方差为1了。

  max-min标准化:也称为离差标准化,预处理后使特征值映射到[0,1]之间。具体的方法是求出样本特征x的最大值max和最小值min,然后用(x-min)/(max-min)来代替原特征。如果我们希望将数据映射到任意一个区间[a,b],而不是[0,1],那么也很简单。用(x-min)(b-a)/(max-min)+a来代替原特征即可。

  经常我们还会用到中心化,主要是在PCA降维的时候,此时我们求出特征x的平均值mean后,用x-mean代替原特征,也就是特征的均值变成了0, 但是方差并不改变。这个很好理解,因为PCA就是依赖方差来降维的,如果我们做了z-score标准化,所以特征的方差为1,那么就没法来降维了。

  虽然大部分机器学习模型都需要做标准化和归一化,也有不少模型可以不做做标准化和归一化,主要是基于概率分布的模型,比如决策树大家族的CART,随机森林等。当然此时使用标准化也是可以的,大多数情况下对模型的泛化能力也有改进。

  (2)异常特征样本清洗

  (3)样本不平衡:一般是两种方法:权重法或者采样法

 

转载于:https://www.cnblogs.com/eilearn/p/9305520.html

你可能感兴趣的:(人工智能,数据结构与算法)