项目实训写实记录No.3

一.检测和处理缺失值与重复值

1.概念与机理

(1)完全变量与不完全变量

数据集中不含缺失值的变量(属性)称为完全变量,数据集中含有缺失值的变量称为不完全变量

(2)缺失值产生的原因

缺失值的产生的原因分为机械原因和人为原因。

  • 前者是由于机器原因导致的数据收集或保存的失败造成的数据缺失。例如:数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集。
  • 后者由于人的主观失误、历史局限或有意隐瞒造成的数据缺失。例如:在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据。

(3)缺失值产生的三种机制

以教育程度(自变量/特征)和收入水平(因变量/结果)关系的调查数据为例,考察收入水平字段的缺失情况:

  • 完全随机缺失(Missing Completely At Random,MCAR):缺失的数据与自身和其它任何变量都没有关系
    • 与自身无关:不管收入高的人还是收入低的人,都有同样的缺失率或缺失可能性;而不是:收入高的人有更多的理由或原因缺失数据,或者反之
    • 与其它变量无关:不管教育程度高还是低,收入水平字段都有同等的缺失率。而不是:教育程度高的人有更大的可能性缺失收入水平数据,或者反之
    • 对于完全随机缺失值,可以把含有缺失数据的样本直接删除,不会影响结果估计的准确性,只会影响精确性。例如,在不缺失情况下,估计的回归系数为0.6,那么删除缺失值后,系数估计值应该仍在0.6附近,只是由于样本数变少,标准误会增大,从而置信区间变宽
    • 完全随机缺失是一种最理想的情况,然而实际中往往很难保证这一假定
  • 随机缺失(Missing At Random,MAR):缺失变量与自身无关,但与其它变量有关
    • 例如:如果收入字段的缺失与教育程度有关系(如教育程度高的人比教育程度低的人缺失的更多),但是与收入本身无关(高收入和低收入的人的缺失人数差不多),这种情况就是随机缺失
    • 当数据有缺失的时候,可以检查自变量相对于缺失的因变量的分布情况。例如年龄、性别等自变量的取值,与收入字段的缺失值之间的统计关系
  • 非随机缺失(missing not at random,MNAR):缺失与变量自身有关
    • 例如:如果发现收入高的人更倾向于不填数据,而收入低的人一般都不缺失,说明收入的缺失是与自身变量有关的
    • 这种情况比较棘手,相当于样本选择有偏(偏向于收入低的人),很可能对结果的可靠性造成不良影响

2.流程与方法

(1)缺失值的处理方法-删除法

  • 将缺失值所在的行删除,或者删除缺失值对应变量字段(如果该变量含有缺失值比例过大)
  • 可能产生的问题
    • 丢失被删除的样本或字段中隐藏的重要信息
    • 产生数据偏移,例如原本的正态分布变为非正态分布
  • 适用范围:样本数据量大且缺失值不多

(2)缺失值的处理方法-单变量插补

  • 仅仅在缺失字段内部进行某些统计计算,将计算结果作为缺失值。这种方式不考虑其它字段对本缺失字段的影响。
  • 填补方法
    • 平均值填补:计算该字段的平均值作为缺失值的默认值。适合正态分布的数值型变量
    • 中位数填补:计算该字段的中位数作为缺失值的默认值,适合偏态分布的数值型变量
    • 众数填补:统计该字段中出现次数最多的取值,作为缺失值的默认值,适合文本型变量
    • 临近值填补:使用样本的前一个或后一个样本所对应字段值作为该样本的默认值
  • 可能产生的问题:
    • 扭曲目标变量的分布,可能错误判断了变量与变量之间的关系

(3)缺失值的处理方法-多变量插补

  • 以缺失字段为结果(因变量),以其它字段为特征(自变量),建立机器学习模型,预测缺失字段的值
  • 填补方法:
    • K-近邻算法填补:对于需要填补缺失字段的样本,先利用欧氏距离找到其邻近的 K K K个样本(计算距离时不计入缺失字段),再将这 K K K个邻近的值进行加权平均进行填补
    • 随机森林填补:以待填补的缺失字段为目标,基于其它字段训练随机森林模型,用模型预测缺失字段的值
    • 迭代插补:
      • 如果有多个字段存在缺失值,则先选择其中1个字段作为结果 y y y,其它字段作为特征 X X X
      • 使用一个回归器来在不含缺失y值的样本上对 ( X , y ) (X, y) (X,y)进行拟合,然后使用这个回归器来预测缺失样本的y值
      • 该字段预测完成后,换到下一个缺失字段作为结果 y y y,其它字段作为特征 X X X,继续进行回归
      • 以迭代的方式对每个特征依次进行,重复若干轮,最后一轮的计算结果作为最终的填充结果

(4)缺失值的处理方法-多重插补(Multiple Imputation)

  • 多重填补方法分为三个步骤:
    • 插补:将不完整数据集缺失的观测行估算填充 M M M次,这将生成 M M M个完整的数据集。估算方法可以采用前述单变量插补或多变量插补,但更好的方法是采用马尔科夫链蒙特卡洛模拟(MCMC,Markov Chain Monte Carlo Simulation)
    • 分析:针对 M M M个数据集分别使用统计方法(例如线性或广义线性模型)进行统计分析
    • 合并:对来自各个插补数据集的统计分析结果,根据评分函数进行选择,产生最终的插补值
  • R语言的mice包提供了经典的多重插补实现,Python提供了miceforest包进行处理。本演练不包括多重插补的内容

(5)重复值判断和处理的方法

  • 判断两个样本是否重复,一般应先指定其中的若干个字段,如果对应字段的值都相同,则视为重复样本
  • 对于重复样本,一般来说是仅保留1条。但具体是保留哪一条,则可能需要根据其它字段的取值,或者样本的顺序来确定

4.技术与实现

(1)判断和检测缺失值

  • pandas.DateFrame.isnull()

(2)直接删除缺失值

  • pandas:DateFrame.dropna

(3)缺失值填充

  • 单变量插补:pandas.DataFrame.fillna、sklearn.impute.SimpleImputer
  • 多变量插补:sklearn.impute.IterativeImputer、sklearn.impute.KNNImputer、sklearn.ensemble.RandomForestRegressor

二.离散化和分箱处理

离散化:把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。它是把连续的数据进行分组,使其变成离散化的区间的过程

  • 分箱:把一段连续的值切分成若干段,每一段的值看成一个分类。分箱是离散化的重要手段之一。
  • 离散化的优点
    • 离散化特征的增加和减少都很容易,有利于模型的快速迭代
    • 可以减少过拟合的风险
    • 增加稀疏数据的概率,减少计算量
    • 有效避免一些异常数据的干扰,降低数据波动影响,抗噪声能力提高
    • 分类树、朴素贝叶斯方法等是基于离散数据展开的
    • 方便特征衍生,因为数据离散化后就可以把特征直接相互做内积提升特征维度

离散化处理方法

  • 等宽法
    • 根据属性的值域来划分,使每个区间的宽度相等
    • 例如数组[4,18,19,22,14,8,9,13,10 ]划分为三组,区间分别是[4,10],(10,16],(16,22] 分组结果是[4,8,9,10],[13,14],[18,19,22]
  • 等频法
    • 等频分组也叫分位数分组,即分组后,每个分组的元素个数是一样的
    • 例如数组[1, 7, 12, 12, 22, 30, 34, 38, 46],需要分成三组,分组后的结果:[1, 7, 12],[12, 22, 30], [34, 38, 46]
  • 卡方分箱
    • 卡方分箱是基于合并的数据离散方法,它依赖于卡方检验。
    • 原理:对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开
    • 本演练不涉及卡方分箱
  • K-Means聚类算法
    • 将n个样本点划分为 K K K个簇,使得相似的样本尽量被分到同一个聚簇
  • 二值化处理
    • 这是一种比较极端的处理方式,通过指定一个阈值,大于阈值的数据划分为一个区间,其余数据划分到另一个区间
(1)二值化处理
  • sklearn.preprocessing.Binarizer
(2)分箱处理
  • numpy.digitize
  • sklearn.preprocessing.KBinsDiscretizer
  • pandas.cut
(3)聚类
  • sklearn.cluster.KMeans
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值