数据清洗
1.缺失值的处理
3种情况:删掉有缺失值的数据;补充缺失值;不做处理。
异常值的处理
数据本身的错误,需要对数据进行修正,或者直接丢弃;
数据偏差的处理
数据偏差可能导致后面训练的模型过拟合或者欠拟合,所以处理数据偏差问题也是你在数据清洗阶段需要考虑的。
数据标准化
在处理完数据的问题之后,你就该对数据的标准进行整理了,这可以防止某个维度的数据因为数值的差异,而对结果产生较大的影响。在有些算法中,每一个维度的数据标准都需要进行统一;而在另外一些算法中,则需要统一数据的类型。比如在预测一个地区的房价时,房屋的面积可能是几十到几百的数值范围,房屋的房间数可能是个位数,而地区平均单价可能是以万为单位的。一个处理方法是你把这些维度的数据都进行标准化,比如把这些数据都规范到 0~1 的区间,这样使用不同的单位来衡量的数据就变得一致了。
特征选择
特征选择就是尽可能留下较少的数据维度,而又可以不降低模型训练的效果。一个项目中,数据的维度可能会有成百上千,比如一个文本中,每一个词或者每一个字都是一个维度,那么要用一个向量去表示一篇文章,这个向量可能需要有上万个维度,所以你要排除掉那些不重要的部分,把重要的部分保留下来。
也许你会认为数据的维度越多越好,但实际上,维度越多,数据就会越稀疏,模型的可解释性就会变差、可信度降低。过多维度还会造成运算的缓慢,尤其是一些运算量较大的算法,同时那些多余的维度可能会对模型的结果产生不好的影响,如某个维度的数据跟结果实际上并没有什么关系,数据也呈现出一种随机的情况,如果没有把这部分数据排除掉,就可能会对某些算法产生影响。
这个时候就需要用到特征选择的技巧,比如自然语言处理里的关键词提取,或者去掉屏蔽词,以减少不必要的数据维度。对于数值型的数据,可以使用主成分分析等算法来进行特征选择,如果你对这部分内容有兴趣,可以在网上找一些资料进行更深入的学习。
构建训练集与测试集
在数据进入模型之前,你还需要对其进行数据采样处理。如果说前面的部分是为了给模型提供一个好的学习内容,那么数据采样环节则是为了评估模型的学习效果。
在训练之前,你要把数据分成训练集和测试集,有些还会有验证集。
如果是均衡的数据,即各个分类的数据量基本一致,可以直接随机抽取一定比例的数据作为训练样本,另外一部分作为测试样本。
如果是非均衡的数据,比如在风控型挖掘项目中,风险类数据一般远远少于普通型数据,这时候使用分层抽样以保障每种类型的数据都可以出现在训练集和测试集中。
当然,训练集和测试集的构建也是有方法的,比如:
留出法,就是直接把整个数据集划分为两个互斥的部分,使得训练集和测试集互不干扰,这个是最简单的方法,适合大多数场景;
交叉验证法,先把数据集划分成 n 个小的数据集,每次使用 n-1 个数据集作为训练集,剩下的作为测试集进行 n 次训练,这种方法主要是为了训练多个模型以降低单个模型的随机性;
自助法,通过重复抽样构建数据集,通常在小数据集的情况下非常适用。