一、 特征工程的重要性和处理
1. 特征工程一般包括特征使用、特征获取、特征处理、特征选择和特征监控。
业界广泛流传着这样的一句话:“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。”具体而言:特征越好,灵活性越强。构建的模型越简单,模型的性能就越出色。好特征的灵活性在于允许你选择不复杂的模型,同时运行速度也更快,更容易理解和维护。好的特征,不需要花太多的时间去寻找最有效的参数,这大大降低了模型的复杂度。
特征工程的处理流程为首先去掉无用特征,接着去掉冗余的特征,如共线特征,并利用存在的特征、转换特征、内容中的特征一起其他数据源生成新特征,然后对特征进行转换(数值化、类别转换、归一化等),最后对特征进行处理(异常值、最大值、最小值、缺失值等),以符合模型的使用。
二、数据预处理和特征工程
2.1数据预处理
1.数据采集
例如预测二手车的价格,那我们需要搜集什么样的信息呢?
4S店:店铺等级、服务质量、业界口碑…
车:价格、购买人数、颜色、质量、发动机、速度…
用户:消费能力、偏好…
2.数据清洗
数据清洗就是要去除“脏”的数据。那么如何判断“脏”的数据呢?
简单属性判定:如身高三米多的人,一个人每个月购买10万元的美发卡
组合或统计属性判定:如号称在美国却一直都是在国内的新闻阅读用户
补齐可对应的缺省值:将不可信的样本丢掉,不用缺省值极多的字段。
3.数据采样
采样的方法有随机采样和分层抽样,但由于随机采样存在隐患,可能某次随机采样得到的数据恨不均匀,因此更多地是根据特征进行分层抽样。
2.2特征处理
这里仅介绍标准化、区间缩放法和归一化。
1.标准化
标准化是依照特征矩阵的列处理数据,即通过求标准分数的方法,将特征转换为标准正态分布,并和整体样本分布相关。每个样本点都能对标准化产生影响。
标准化需要计算特征的均值和方差,公式如下:
x
′
=
x
−
X
ˉ
S
x'=\frac{x-\bar{X}}{S}
x′=Sx−Xˉ
例如使用preprocessing库的StandardScaler类对iris数据及进行标准化,代码如下:
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
iris = load_iris()
StandardScaler().fit_transform(iris.data)
2.区间缩放法
常见的一种是利用两个最值(最大值和最小值)进行缩放。公式如下:
x
′
=
x
−
M
i
n
M
a
x
−
M
i
n
x'=\frac{x-Min}{Max-Min}
x′=Max−Minx−Min
例如,使用preprocessing库的MInMaxScaler类对iris数据及进行区间缩放,代码如下:
from sklearn.preprocessing import MinMaxScaler
MinMaxScaler().fit_transform(iris.data)
3.归一化
归一化是将样本的特征值转换到同一量纲下,把数据映射到[0,1]或者[a,b]区间内,由于其仅由变量的极值决定,因此区间缩放法是归一化法的一种。
诡异区间会改变数据的原始距离、分布和信息,但标准化一般不会。
规则为L2的归一化公式如下:
x
′
=
x
∑
j
m
x
[
j
]
2
x'=\frac{x}{\sqrt{\sum_{j}^mx[j]^2}}
x′=∑jmx[j]2x
例如,使用preprocessing库的Nromalizer类对iris数据集进行归一化,代码如下:
from sklearn.preprocessing import Normalizer
Normalizer().fir_transform(iris.data)
3.特征降维
降维指的是采用某种映射方法,将高维向量空间的数据点映射到低维的空间中。将为的本质是学习一个映射函数
f
:
x
→
y
f:x\rightarrow y
f:x→y,其中,
x
x
x是原始数据点的表达,通常
y
y
y的维度小于
x
x
x的维度(当然提高纬度也是可以的)。
f
f
f函数的定义比较灵活,可以是显示或隐式的,也可以是线性或非线性的。
特征降维的常用方法有特征选择和线性降维。
3.1特征选择
1.特征选择的定义:
特征选择实在数据分析和简单建模当中最常用的特征降维手段。即映射函数将不重要的特征删除,不过这样会造成特征信息的丢失,不利于模型的精度。
特征选择的目标 | 说明 |
---|---|
特征是否发散 | 如果一个特征不发散,如方差接近于0,就说明样本在这个特征上基本没有差异,这个特征对于样本的区分没有作用 |
特征与目标的相关性 | 与目标相关性的特征应当优先选择 |
2.特征选择的方法:
特征选择的方法有过滤法、包装法和嵌入法
- 过滤法:按照发散性或者相关性对各个特征进行评分,通过设定阈值或者选择阈值的个数来选择特征。
- 包装法:根据目标函数(通常是预测效果评分)每次选择若干特征,或者排除若干特征。
- 嵌入法:使用机器学习的某些算法和模型进行训练,得到各个特征的权值系数,并根据系数从大到小选择特征。
3.2 线性降维
线性降维的方法主要有主成分分析法和线性判别分析法
1.主成分分析法
主要原理是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此达到使用较少的数据维度来保留较多的原数据点特性的效果。
以iris数据集为例,使用decomposition库的PCA类选择特征的代码如下:
from sklearn.decomposition import PCA
PCA(n_components=2).fit_transform(iris_data)
2.线性判别分析法(LDA)
Linear Discriminant Analysis也叫作Fisher线性判别(Fisher Linear Discriminant, FLD),是一种有监督的线性降维算法。与PCA尽可能多地保留数据信息不同,LDA的目标是是将尾喉的数据点尽可能地容易被区分,并利用了其标签的信息。
假设原始线性数据为
X
X
X,我们希望能找到映射向量
a
a
a,使得
a
X
aX
aX后的数据点能够保持以下两种性质:
1、同类的数据点尽可能的接近;
2、不同类的数据点尽可能的分开。
以iris数据集为例,使用lda库的LDA类选择特征的代码如下:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
LDA(n_components=2).fit_transform(iris.data,iris.target)
[1].阿里云天池大赛——机器学习篇