数据预处理基础知识(三) | 「掘金日新计划 · 12 月更文挑战」

316 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天

一、本篇笔记重点内容:

  • 缺失值填补方法
  • 基于模型的缺失值填补

二、详细知识点介绍

缺失值的简单处理

均值填补

  • 含有缺失值的数据没有携带完整的信息,但简单的删除会导致已有信息的丢失
  • 保留现有的数据,并对缺失值进行填补,成为合适的选择
  • 通常来讲,可使用均值、中位数和众数对缺失值进行填补

根据属性的不同类型,把含缺失值的属性进行缺失值填补

     数值型:使用缺失值所在列的其他数据记录取值的均值、中位数进行填补

     非数值型:使用同列其他数据记录取值次数最高的数值(众数)进行填补

均值填补一般用于数值型数据

gen_data.mean()
feature1       -0.891054
feature2       -0.054773 
feature3        0.149065

dtype: float64

gen_data.fillna(gen_data.mean())

image.png

中位数填补

使用缺失值所在列的中位数填充缺失值所在的位置

众数填补

众数填补一般用于非数值型数据

插值填补

  • 利用函数f(x)在某个区间的特定值,计算出特定的函数
  • 在区间内的其他点上使用该函数的值作为f(x)的近似值
  • 使用插值法的思路,我们可以用来处理数据缺失,计算缺失值的估计值

拉格朗日插值填补

使用Scipy库的interpolate模块实现拉格朗日插值

 确定非缺失值的索引

 找出含有缺失值列的其他值

 调用lagrange函数得出拉格朗日插值多项式的系数

 输入缺失值所在索引,返回对应的插值

线性插值填补

当n = 1时,拉格朗日插值退化为线性插值法

      线性插值法也称为两点插值法

      使用两个已知点x0和x1确定的直线来近似区间[x0, x1]中其他点的函数值

使用Pandas库的interpolate函数实现线性插值

参数使用默认值,相当于对缺失值所在位置的前后值求均值,进行填补

特殊值填补

  • 把缺失值,空值等当作特殊的属性取值来处理,区别任何其他的属性取值
  • 例如,将所有的缺失位置用None, unknown等来填充
  • 这种方法可能会导致严重的数据偏离,无法准确表达原始数据的含义

在Pandas库中,np.nan作为缺失值的一种表示方式

 含义是Not a Number,用来表明一个缺失的浮点型数值

还可以使用Python语言中的None这个单例对象来表示缺失值

 None是一个Python对象,Pandas和Numpy库的数组不能随意使用

 None只能在类型为object的数据结构中出现,来表示缺失值

基于模型的缺失值填补

  • 基于模型的方法将含有缺失值的变量作为预测目标
  • 将数据集中其他变量或其子集作为输入变量,通过变量的非缺失值构造训练集,训练分类或回归模型
  • 使用构建的模型来预测相应变量的缺失值

线性回归

  • 线性回归可以用来预测响应变量,那如何用来进行缺失值填充呢?
  • 含有缺失值的属性作为因变量
  • 其余的属性作为多维的自变量
  • 建立二者之间的线性映射关系
  • 求解映射函数的系数

线性回归填补和插值法的关系:

线性回归要求

     拟合函数与原始数据的误差最小,是一种整体靠近,对局部性质没有要求

插值方法要求

     在原有数据之间插入数值,插值函数必须经过所有的已知数据点

KNN算法

通过计算训练集样本与目标样本的相似性,“鼓励”每个样本与目标样本去匹配

根据给定条件,选择最适合的K个样本作为目标样本的“邻居”

相似性的度量有以下选择:

image.png

主要步骤:

计算距离:给定目标样本,计算它与训练集中每个样本的距离

寻找邻居:选择距离最近的K个训练集样本,作为目标样本的近邻

分类预测:根据近邻样本的所属类别,或者属性的取值来预测目标样本的类别或者属性取值

需要注意:

  • 标准KNN算法对数据样本的K个邻居赋予相同的权重,并不合理
  • 一般来说,距离越远的数据样本所能施加的影响就越小
  • 需要对KNN一定的改进,比如让邻居的权重与距离成反比关系