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

摘要:
它类似于过滤方法,但它通过机器学习训练来确定特征的优缺点,而不是直接从一些统计指标中确定特征的优劣。1) 归一化后,加速了寻找最优解的梯度下降速度;2) 归一化可以提高精度。

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

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)样本不平衡:一般是两种方法:权重法或者采样法

免责声明:文章转载自《机器学习(二十一)— 特征工程、特征选择、归一化方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sql查询语句详解nginx 配置的一些参数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

spark 特征选择、特征预处理:提取/转换/选择 缺失值 sparkMllib

数据预处理与特征工程 缺失值处理 缺失值处理通常有如下的方法: 对于unknown值数量较少的变量,包括job和marital,删除这些变量是缺失值(unknown)的行; 如果预计该变量对于学习模型效果影响不大,可以对unknown值赋众数,这里认为变量都对学习模型有较大影响,不采取此法; 可以使用数据完整的行作为训练集,以此来预测缺失值,变量hous...

机器学习 | 强化学习(5) | 价值函数拟合(Value Function Approximation)

价值函数拟合(Value Function Approximation) 导论(Introduction) 目前的价值函数都是基于打表法(lookup table)进行穷举 对于所有状态(s)都有一个实体(V(s))去表示 或者对于每个状态-价值函数对(s,a)都有一个实体(Q(s,a))去表示 对于拥有大规模马尔科夫决策过程的问题 状态和动...

OpenCv 011---像素归一化

1 前备知识 归一化:把数据变成(0,1)或者(1,1)之间的小数,主要是为了方便数据处理。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。有以下几种方式: (1)x'= (x-x_min)/(x_max-x_min) 其中,x是归一化前的值,x'是归一化后的值,x_max、x_min分别是样本的最大最小值; (2)...

四大机器学习编程语言对比:R、Python、MATLAB、Octave

本文作者是一位机器学习工程师,他比较了四种机器学习编程语言(工具):R、Python、MATLAB 和 OCTAVE。作者列出了这些语言(工具)的优缺点,希望对想开始学习它们的人有用。 图源:Pixabay.com GitHub 地址:https://github.com/mjbahmani/10-steps-to-become-a-data-sci...

TinyML:下一轮人工智能革命——看来边缘计算 AI模型小型化也是一大领域

TinyML:下一轮人工智能革命   由 NASA 引领的小型化风潮已经席卷了整个消费电子产品产业。现在,一个领针中即可保存全部贝多芬作品,并可使用耳机聆听。———天体物理学家、科学评论员 Neil deGrasse Tyson ……超低功耗嵌入式设备的普及,以及用于微控制器的 TensorFlow Lite 等嵌入式机器学习框架的推出,意味着人工智...

深度学习之数据预处理

预处理与权重初始化之间的关系 如果做过DNN的实验,大家可能会发现在对数据进行预处理,例如白化或者z-score,甚至是简单的减均值操作都是可以加速收敛的,例如下图所示的一个简单的例子: 图中红点均代表二维的数据点,由于图像数据的每一维一般都是$0~255$之间的数字,因此数据点只会落在第一象限,而且图像数据具有很强的相关性,比如第一个灰度值为$30$,...