1、数据预处理
量纲不一
0-1标准化:对原始数据进行线性变换,将特征映射在0-1区间内
标准化=(原数据-最小值)/(最大值-最小值)
z标准化:将特征值的均值和标准差进行数据的标准化,计算后的数据在0上下波动。
标准差是各个数据偏离平均数的距离的平均数,
标准差可以反应数据集的离散程度,平均数相同,标准差未必相同
对于数据方差非常小的属性可以增强稳定性
Normalizer归一化
虚函数变量
虚拟变量也称为哑变量和离散特征编码,用来表示分类变量,离散特征编码分为没有大小意义的形式和有大小意义的形式。
缺失值处理
可以分为以下 2 种情况:
缺失值较多
直接舍弃该列特征,否则可能会带来较大的噪声,从而对结果造成不良影响。
缺失值较少
当缺失值较少(<10%)时,可以考虑对缺失值进行填充,以下是几种常用的填充策略:
对于数值型数据的异常值填充可分为一下几种情况
- 一个异常值填充(比如 0),将缺失值作为一个特征处理data.fillna(0)
- 用均值|条件均值填充
如果数据是不平衡的,那么应该使用条件均值填充
所谓条件均值,指的是与缺失值所属标签相同的所有数据的均值
data.fillna(data.mean()) - 用相邻数据填充
# 用前一个数据填充 data.fillna(method='pad') # 用后一个数据填充 data.fillna(method='bfill') - 插值
data.interpolate() - 拟合
简单来说,就是将缺失值也作为一个预测问题来处理:将数据分为正常数据和缺失数据,对有值的数据采用随机森林等方法拟合,然后对有缺失值的数据进行预测,用预测的值来填充。
2、特征工程:
什么是特征选择
特征选择也称为属性选择,特征子集选择,是从全部特征集中选择出一个子集,使得构造出来的模型更好
为什么要进行特征选择?
在机器学习中的实际应用中,特征数量往往较多,其中可能存在不相关的特征,特征之间有可能存在相互依赖,容易导致,一是特征个数越多,分析特征、训练模型所需要的时间就越长,二是特征个数越多,容易引起“维度灾难”,模型也会越复杂,其推广能力会下降
特征选择能提出不相关和冗余的特征,从而达到减小特征个数,提高模型精确度,减少运行时间的目的,另一方面,选取出真正正相关的特征模型,使得研究人员易于理解数据产生的过程
特征选择基础
数据预处理完成之后,我们需要选择有意义的特征,输入机器学习的算法和模型进行训练,通常来说,从两个方面考虑来选择特征
- 如何选择特征
- 是否发散
- 是否相关
如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本没有差异,那我们就可以判断,这个特征对于样本的区别并没有什么用第二个是特征与目标的相关性,与目标相关性高的特征应该优先选择
特征选择常用的方法
1) 过滤法(方差选择法)
方法选择法,先计算各个特征的方差,根据阈值,选择方差大于阈值的特征
2) 相关系数法
先计算各个特征对目标值的相关系数,选择更加相关的特征
3)递归特征消除
使用一个基模型来进行多轮训练,经过多轮训练后,保留指定的特征数
4)模型选择法
它是一种我们把建好的模型对象传入到选择器,然后它会根据这个已经建好的模型,自动选择最好的特征值
5)维度压缩
LDA:线性判别分析法(LDA)当选取后的特征矩阵过大时,需要进行降维度处理,维度压缩包括主成分压分析法(PCA)和线性判别分析法(LDA)
PCA:主成分分析(Principal Components)