机器学习——数据预处理(Preprocessing)

通常我们获取到的初始数据通常具有缺失值,重复值,以及一些噪音数据等,需要在使用之前进行数据预处理。
数据预处理的常用流程为:去除唯一属性、缺失值处理、异常值处理、属性编码、数据标准化、特征选择、主成分分析。

1、去除唯一属性

唯一属性通常是一些id属性,这些属性并不能刻画样本自身的分布规律,所以简单地删除这些属性即可。

2、缺失值处理
  • 删除包含缺失值的一整列
    当该列种的大部分数据都缺失时可采用该方式,如果只有个别数据缺失,直接删除整列会导致大量信息丢失
    机器学习——数据预处理(Preprocessing)_第1张图片
  • 填充缺失值
    往缺失值中填入相关数据,例如:列均值、中位数、众数等
    填充值往往比直接删除整列数据有更好的效果
    机器学习——数据预处理(Preprocessing)_第2张图片
  • 扩展填充
    直接填充缺失值往往和实际的值之间有所差别,加入一列记录原始数据是否缺失可能会对预测结果有更好的效果
    机器学习——数据预处理(Preprocessing)_第3张图片
3、异常值识别与处理

异常值是数据中常有的噪音,异常值又可以分为“真异常”和“假异常”。有时特定业务动作的变化会引发“真异常”,此时异常值反应的是真实情况,如果直接删除掉,可能就错失了信息。
识别异常值的方法:

  • 描述性统计法
    通过描述性统计的方法,可以获取到数据的极大值、极小值、均值、标准差等基本统计数据,然后根据常识判断出与基本认知不符的数据。
    例如:年龄的极大值为200,或者极小值为负数等,都属于异常数据
  • 3 σ 3\sigma 3σ方法
    对于符合正太分布或者近似符合正太分布的数据,99%的数值应该位于距离均值3个标准差之内的距离, P ( ∣ x − μ ∣ > 3 σ ) ≤ 0.003 P(|x−μ|>3σ)≤0.003 P(xμ>3σ)0.003,当数值超出这个距离,可以认为它是异常值。
  • 箱线图法
    箱式图法将大于Q3+3/2*(Q3-Q1),小于Q1-3/2*(Q3-Q1)的数据认定为异常值。
  • 基于密度的离群点检测
    经典的基于密度的聚类算法DBSCAN算法,从任何一个核心对象出发都是密度不可达的点即为噪音点。
  • 基于聚类算法的异常点检测
    如果某个数据不属于任何一个簇,那么该数据属于离群点。

处理异常值方法:
①将异常值作为缺失值一样处理
②直接删除含有异常值的记录
③不处理,直接在具有异常值的数据集上进行数据挖掘

是否要对异常值进行处理视情况而定,有些模型对异常值不敏感的可不做处理,而一些对异常值特别敏感的模型,比如逻辑回归,如果对异常值不处理,则会严重影响模型的效果。

4、属性编码

在使用分类变量(特征)搭建机器学习模型之前,需要将分类变量变成数值变量才能将该特征加入模型中进行训练
对分类变量预处理有三种方式:

  • 直接删除分类变量
    最简单的处理方法是直接将是类别型的特征作删除处理,训练模型的时候只考虑数值型变量即可,该方法会导致损失有用信息
  • 标签编码(Label Encoding)
    对类别变量中每一个取值都赋予一个对应的数值,该方法假定各个取值之间存在某种顺序关系
    机器学习——数据预处理(Preprocessing)_第4张图片
    例如: “Never” (0) < “Rarely” (1) < “Most days” (2) < “Every day” (3)
  • 独热编码(One-Hot Encoding)
    当分类变量中各个取值之间不存在某种顺序关系的时候,独热编码将是一种更好的选择
    独热编码可以理解为,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征,并且这些特征互斥,每次只有一个激活
    机器学习——数据预处理(Preprocessing)_第5张图片
    当分类中取值可能性很多(m>15)时,不适合使用独热编码,这会造成特征数量的急剧增长
5、数据标准化

数据标准化是将样本的属性缩放到某个指定的范围
数据标准化的原因是需要消除样本不同属性具有不同量级时的影响:
①数量级的差异将导致量级较大的属性占据主导地位
②数量级的差异将导致迭代收敛速度减慢
③依赖于样本距离的算法对于数据的数量级非常敏感

6、特征选择

从给定的特征集合中选出相关特征子集的过程称为特征选择。
进行特征选择的两个主要原因是:
①减轻维数灾难问题;
②降低学习任务的难度
进行特征选择必须确保不丢失重要特征

  • 无关特征
    与因变量不相关的特征。
    例如:通过空气的湿度,环境的温度,风力和当地人的男女比例来预测明天是否会下雨,其中男女比例就是典型的无关特征。
  • 多余特征
    和其他特征存在相关性的特征。
    例如:通过房屋的面积,卧室的面积,车库的面积,所在城市的消费水平,所在城市的税收水平等特征来预测房价,那么消费水平(或税收水平)就是多余特征。证据表明,税收水平和消费水平存在相关性,我们只需要其中一个特征就足够了。

特征选择的方法:

  • 删除不相关的特征和多余特征
  • 删除方差小的特征
    假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。
    使用方差选择法时,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。使用feature_selection库的VarianceThreshold类来选择特征。
  • 单变量特征选择
    独立衡量每个特征与响应变量之间的关系。单独计算每个变量的某个统计指标,根据该指标来判断哪些指标重要,剔除那些不重要的指标。
    例如:
    卡方检验,检验定性自变量与定性因变量的相关性。
    Pearson相关系数,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性。
    Pearson相关系数的一个明显缺陷是:只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系如( x , x 2 x,x^2 x,x2),Pearson相关性也可能会接近0
  • 基于模型的特征排序
    直接使用机器学习算法,例如树(决策树、随机森林)进行特征选择。
  • 基于L1范式的特征选择
    使用L1范数作为惩罚项的线性模型(Linear models)会得到稀疏解:大部分特征对应的系数为0。
7、数据泄露(Data leakage)

(1)目标泄露(Target leakage)
数据科学的中的数据泄露(Data Leakage)是指一些feature不是在因果关系上解释预测值的‘因’,而是解释预测值的‘果’,存在和利用这种因果倒置的feature的现象。
通常是由于准备数据或者数据采样的时候出了问题,误将与结果直接相关或存在颠倒因果关系的feature纳入了数据集。
举个例子:
机器学习——数据预处理(Preprocessing)_第6张图片
预测目标:是否患有肺炎(got_pneumonia)
特征:服用抗生素药物(took_antibiotic_medicine)
通常情况下是否患有肺炎和服用抗生素药物关联紧密,但是服用抗生素药物一般是患有肺炎的“果”,我们在预测人员是否会患肺炎时,通常对其是否具有肺炎是未知状态,在这一状态下用户一般不会服用抗生素药物。took_antibiotic_medicine这一特征的使用会使得模型在训练集中表现良好,但在测试集中表现不佳。为了防止数据泄露,在建立模型时,该特征数据应该被丢弃。
如何避免目标泄露?
要避免目标泄露,则需要排除预测时间点之后的任何变量

(2)训练-测试污染(Train-Test Contamination)
当我们在区分训练数据和验证数据时不够小心,则容易导致Train-Test Contamination,模型验证就是度量模型在之前未曾涉及过的数据中的表现如何,如果验证数据影响了数据预处理过程的话则可以以微妙的方式损坏模型验证。(简单的来讲,就是使用train_test_split()之前,就对数据进行预处理了)

简而言之,验证数据集不应该影响到训练数据集的预处理和模型构建。通过使用sklearn中的管道方法(pipeline)处理数据

你可能感兴趣的:(机器学习)