机器学习之数据预处理
1. 为什么需要数据预处理? 原始数据来自于现实场景,常常有以下几个特征:脏、乱、差、缺。脏体现在原始数据里混杂许多噪声数据,乱体现在原始数据各维度量纲不同一。差体现在数据错误、出现不寻常不一致,这和脏相似。缺体现在原始数据的某些数据段值的缺失。
2. 数据预处理的方法。
- 脏乱——归一化、标准化、中心化
归一化、标准化和中心化是数据预处理中重要的方法: 归一化和标准化的区别:归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种。标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。
标准化和中心化的区别:标准化是原始分数减去平均数然后除以标准差,中心化是原始分数减去平均数。 所以一般流程为先中心化再标准化。
什么时候用归一化?什么时候用标准化? (1)如果对输出结果范围有要求,用归一化。 (2)如果数据较为稳定,不存在极端的最大最小值,用归一化。 (3)如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响。
有些模型必须归一化或标准化,比如SVM,KNN、神经网络、PCA,这些模型的迭代求解过程中都会受数据量纲不同而影响巨大,而且往往仅仅归一化是不够的,还需要标准化。归一化适用于小数据场景,标准化适用于现如今的嘈杂大数据场景,所以建议优先使用标准化。
- 差、缺——异常值处理、数据补全数据清洗 差——异常值(离群点):
基于模型检测:比如用逻辑回归来进行拟合预测,异常值则是那些原理拟合结果的点。 基于距离:通过在对象之间定义临近性度量,异常对象是那些远离其它对象的对象,缺点是效率为O(N2), 并且基于所有样本来定一个阈值,没有处理密度不同数据样本,无法捕捉密度变化。 基于密度: 当局部密度大于它的近邻时认为时离群点,捕捉密度变化,适用于密度分布不均匀的样本。缺点是效率为O(N2),和密度聚类算法有一样的问题,就是参数确定的问题。
异常值的处理方法:
- 删除异常值----明显看出是异常且数量较少可以直接删除
- 不处理—如果算法对异常值不敏感则可以不处理,但如果算法对异常值敏感,则最好不要用这种方法,如基于距离计算的一些算法,包括kmeans,knn之类的。
- 平均值替代----损失信息小,简单高效。
- 视为缺失值----可以按照处理缺失值的方法来处理
异常值的出现我觉得往往是由于两个原因,一是数据本身错误,噪声过大导致与其他样本分布不同。二是原数据本身的分布偏好,这个数据本身是真实可靠的,但由于与其他数据分布都完全不同,被认为是“异常值、离群点”。
- 缺——数据补全
常由两个思路,(1)通过其他维度的信息补全。(2)通过前后信息补全。
(1)是通过其他的维度来推理补全该缺省数据,跟数据中的其他样本关系巨大。(2)比如时序数据,我们可以用前后值的均值对其进行平均,来平滑数据。
主要方法有:(1)插补法主要有随机插补法,多重插补法,热平台插补法,以及拉格朗日插值法与牛顿插值法。