特征工程
目录
1 特征工程是什么?
2 特征清洗
3 数据预处理
3.1 无量纲化
3.1.1 标准化
3.1.2 归一化(区间缩放)
3.1.3 正则化
3.2 对定量特征二值化
3.3 对定性特征哑编码
3.4 缺失值计算
3.5 生成多项式特征和自定义转换
4 特征选择
4.1 Filter
4.1.1 方差选择法
4.1.2 相关系数法
4.1.3 卡方检验
4.1.4 互信息法
4.2 Wrapper
4.2.1 递归特征消除法
4.3 Embedded
4.3.1 基于惩罚项的特征选择法
4.3.2 基于树模型的特征选择法
5 降维
5.1 主成分分析法(PCA)
5.2 线性判别分析法(LDA)
1 关于特征工程:
在数据预处理之前,先来了解下特征工程,特征工程指的是在原始数据之中提取,构造,选择数据特征的过程。有句话是:“数据和特征工程决定了你能到达的上限,机器学习模型决定了你能多么逼近这个上限”。特征工程是数据分析过程中最重要的一步,当然也很能简单的理解,毕竟特征工程是建模步骤的基础和准备。
特征工程详细分解为特征使用、特征获取、特征处理、特征监控。
特征使用是指基于业务理解,尽可能找出对因变量有影响的所有自变量(特征)。找出特征后需要评价其特征的获取难度、覆盖率和准确率。
特征获取是指如何获取这些特征、如何存储这些特征。
接下来是特征处理,特征处理分为特征清洗、对单个特征的预处理、对多个特征的预处理和衍生变量。
最后是特征监控,指验证特征的有效性分析,防止特征质量下降、影响模型效果。
2 特征清洗
3 数据预处理(数据变换)
通过特征提取,得到未经处理的特征存在以下问题:
不属于同一量纲:即特征的单位不同,不能相互比较。
信息冗余:这里主要争对定量特征,我们只关心某变量属于哪一类区间而不是具体等于具体值,这个时候需要对其值进行区间划分,比如二值化。
定性特征不能直接使用:对于某些模型不能直接使用定性特征,通常使用哑编码(又叫独热编码)的方式将定性特征转化为定量特征,假设某个定类特征有N个定类值,则处理方式是原始特征值为第i种定性值时,将第i个扩展特征赋值为1,其余扩展特征赋值为0。这样原来一个特征从形式上来看就被扩展为N个特征,这种方式不用增加调参的工作。
存在缺失值:要么剔除要么填充。
信息利用率低:不同的机器学习算法和模型对数据中信息的利用是不同的,之前提到在线性模型中,使用对定性特征哑编码可以达到非线性的效果。类似地,对定量变量多项式化,或者进行其他的转换,都能达到非线性的效果。
我们使用sklearn中的preproccessing库来进行数据预处理,可以覆盖以上问题的解决方案。
3.1 无量纲化
无量纲化使不同量纲的数据转换到同一标准上。目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不同的标准化方法,对系统的评价结果会产生不同的影响,然而不幸的是,在数据标准化方法的选择上,还没有通用的法则可以遵循。
常见的无量纲化方法有:min-max标准化(Min-max normalization),log函数转换,atan函数转换,z-score标准化(zero-mena normalization,此方法最为常用),模糊量化法。本文只介绍min-max法,z-score法(标准化),正则化。
3.1.1 标准化
标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。标准化需要计算特征的均值和标准差,对特征进行以下处理:
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
iris = load_iris()
# 载入鸢尾花数据
a = StandardScaler()
# a选择StandardScaler作为数据的estimator.
b = a.fit_transform(iris.data)
# iris.data 为特征矩阵 iris.target为目标向量
# fit_transform为拟合并转换数据
print(b)
3.1.2 归一化(区间缩放)
区间缩放利用了边界值信息,将特征的取值区间缩放到某个特点的范围,例如[0, 1]等。区间缩放需要找特征中的最大最小值,
from sklearn.preprocessing import MinMaxScaler
#区间缩放,返回值为缩放到[0, 1]区间的数
a = MinMaxScaler()
b = a.fit_transform(iris.data)
print(b)
3.1.3 正则化(还没有想到实际的数据转化应用)
标准化和正则化的区别,简单来说,标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。正则化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。(其他相似解释:正则化数据和之前的标准化数据不同,之前标准化数据是针对特征来说的,而现在正则化是对样本来做的,是用样本数据除以他的范式)
Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。在sklearn中有三种正则化方法,l1范数、l2范数、max范数。
p-范数的计算公式:
该方法主要应用于文本分类和聚类中。例如,对于两个TF-IDF向量的l2-norm进行点积,就可以得到这两个向量的余弦相似性。
规则为l2(2-范数)的正则化公式如下: