特征工程
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已!
数据描述
- 统计值:max, min, mean, std等
- 集中趋势
- 分布形状
特征处理
数据预处理
缺失值处理
- 缺失值删除
- 删除样本
- 删除特征
- 缺失值填充
- 固定值填充,如0,999,-999
- 均值填充
- 众数填充
- 上下数据填充
- 插值法填充
- KNN填充
- random forest填充
- 不填充: LightGBM和XGBoost都能对NaN数据进行学习,不需要处理缺失值
异常值处理
- 基于统计的异常点检测算法 例如极差,四分位数间距,均差,标准差等,这种方法适合于挖掘单变量的数值型数据。
- 基于距离的异常点检测算法 主要通过距离方法来检测异常点,将数据集中与大多数点之间距离大于某个阈值的点视为异常点,主要使用的距离度量方法有绝对距离(曼哈顿距离)、欧氏距离和马氏距离等方法。
- 基于密度的异常点检测算法 考察当前点周围密度,可以发现局部异常点。
特征转换
连续型特征
-
函数转换:有时我们的模型的假设条件是要求自变量或因变量服从某特殊分布(如正太分布),或者说自变量或因变量服从该分布时,模型的表现较好。
-
特征缩放:某些模型(像岭回归)要求你必须将特征值缩放到相同的范围值内。通过缩放可以避免某些特征比其他特征获得大小非常悬殊的权重值。
-
无量纲化:无量纲化使不同规格的数据转换到同一规格。
-
标准化:
- 均值方差法
- z-score标准化
- StandardScaler标准化
-
归一化:
- 最大最小归一化
- 对数函数转化(log)
- 反余切转化
-
区间缩放法:区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放。
$$
x^{\prime}=\frac{x-Min}{Max-Min}
$$
-
-
二值化(定量特征):特征的二值化处理是将数值型数据输出为布尔类型。其核心在于设定一个阈值,当样本书籍大于该阈值时,输出为1,小于等于该阈值时输出为0。
-
离散化分箱处理:将数值型属性转换成类别型更有意义,同时将一定范围内的数值划分成确定的块,使算法减少噪声的干扰,避免过拟合。
-
等值划分
-
等频划分
-
离散化特征
-
数值化处理:将类别属性转换成一个标量,最有效的场景应该就是二分类的情况。这种情况下,并不需要排序,并且你可以将属性的值理解成属于类别1或类别2的概率。 多分类问题:选取多分类,编码到[0,classnum)。
该方法局限性较大:
- 不适用于建立预测具体数值的模型,比如线性回归,只能用于分类,
- 即使用于分类,也有一些模型不适合,
- 可能结果的精度不如one-hot编码。
-
哑编码:
-
独热编码(one-hot):数据集中的每个实例,只有一个是1(其他的为0)
- 优点:简单,且保证无共线性。
- 缺点:太稀(稀疏矩阵)
-
顺序性哑变量:将一个变量的k个值生成k个哑变量,保护了特征的顺序关系。
status 向量表示 bad (1,0,0) normal (1,1,0) good (1,1,1)
-
特征选择
特征检验
单变量
- 正态性检验
- 显著性分析
多变量
- 一致性检验
- 多重共线性
特征选择
Filter:过滤法
按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。过滤式特征选择的评价标准分为四种,即距离度量、信息度量、关联度度量以及一致性度量。
**优点:**算法的通用性强;省去了分类器的训练步骤,算法复杂性低,因而适用于大规模数据集;可以快速去除大量不相关的特征,作为特征的预筛选器非常合适。
缺点:由于算法的评价标准独立于特定的学习算法,所选的特征子集在分类准确率方面通常低于Wrapper方法。
-
方差选择法
计算各个特征的方差,选择方差大于阈值的特征 。
-
相关系数法
计算各个特征对目标值的相关系数以及相关系数的P值。
$$
\rho_{\boldsymbol{x},\boldsymbol{y}}=\frac{\text{cov}(\boldsymbol{x},\boldsymbol{y})}{\sigma_\boldsymbol{x}\sigma_\boldsymbol{y}}=\frac{E[(\boldsymbol{x}-\mu_\boldsymbol{x},\boldsymbol{y}-\mu_\boldsymbol{y})]}{\sigma_\boldsymbol{x}\sigma_\boldsymbol{y}}
$$
使用条件:- 两个变量间有线性关系;
- 变量是连续变量;
- 变量均符合正态分布,且二元分布也符合正态分布;
- 两变量独立;
- 两变量的方差不为 0;
-
互信息法
互信息(mutual information)是用来评价一个事件的出现对于另一个事件的出现所贡献的信息量。
$$
I(X;Y) = \sum\limits_{y \in \mathcal{Y}}\sum\limits_{x \in \mathcal{X}} p(x,y) ,\text{log}\left(\frac{p(x,y)}{p(x)p(y)}\right)
$$
而如果 𝑥 和 𝑦 是相互独立的随机变量,则 𝑝(𝑥,𝑦)=𝑝(𝑥)𝑝(𝑦) ,那么上式为 0。因此若 𝐼(𝑋;𝑌)越大,则表示两个变量相关性越大,于是就可以用互信息来筛选特征。 -
卡方检验(Chi-Square)
卡方检验恰好可以进行独立性检验,所以其适用于特征选择。
卡方分布,其定义如下:
设随机变量$x_1, x_2 … x_n ,,\quad \text{i.i.d} \sim N(0,1)$,即独立同分布于标准正态分布,那么这 𝑛个随机变量的平方和:
$$
X = \sum\limits_{i=1}^n x_i^2
$$
构成一个新的随机变量,其服从自由度为 𝑛 的卡方分布 ( 𝜒2 分布) ,记为 $X \sim \chi^2_n$。计算检验统计量 𝜒2 ( 𝜒2χ表示卡方值) ,𝜒2 越大,表示观测值和理论值相差越大,当 𝜒2 大于某一个临界值时,就能获得统计显著性的结论。
$$
\chi^2 = \sum\frac{(观测频数 - 期望频数)^2}{期望频数}= \sum_{i=1}^{r} \sum_{j=1}^{c} {(O_{i,j} - E_{i,j})^2 \over E_{i,j}}
$$
Wrapper:包装法
根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
Embedded:嵌入法
先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。