问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

3000字详解四种常用的缺失值处理方法

创作时间:
作者:
@小白创作中心

3000字详解四种常用的缺失值处理方法

引用
CSDN
1.
https://blog.csdn.net/2501_90256916/article/details/145180787

在数据处理中,缺失值是一个常见的问题。如何处理这些缺失值,直接影响到后续的数据分析和模型训练效果。本文将详细介绍四种常用的缺失值处理方法,包括删除和填充两种主要策略,并通过代码示例进行说明。

对于缺失值的处理大致可分为以下三方面:

  • 不处理
  • 删除含有缺失值的样本
  • 填充缺失值

不处理应该是效果最差的了,删除虽然可以有效处理缺失值,但是会损伤数据集,好不容易统计的数据因为一个特征的缺失说删就删实在说不过去。填充缺失值应该是最常用且有效的处理方式了,下面介绍四种处理缺失值的常用Tips。

我自己构建了一个简易的含有缺失值的DataFrame,所有操作都基于这个数据集进行。

1. 删除缺失值

删除虽说是一个可行的方式,但肯定是不能随便删除的,比如一个样本中仅有一个特征的值缺失,这样的情况下填充取得的效果一定会优于删除,所以在删除缺失值时,我们需要一个衡量的标准。

删除的方式无非有两种,一是删除缺失值所在行,也就是含有缺失值的样本;二就是删除缺失值所在列,也就是含有缺失值的特征,下面以后者为例。

首先需要确定的是删除的标准是什么?比如一个特征的缺失值所占比例已经超过了50%,如果选择填充的话,就表明该特征超五成的值都是自己猜测填入的,导致误差可能比删除这个特征还要大。

def find_missing(data):
    missing_data = data.isnull()
    for column in missing_data.columns.values.tolist():
        print(column)
        print(missing_data[column].value_counts())
        print("")

通过上述代码,我们可以查看每个特征的缺失值情况。接下来,我们定义一个阈值,当特征的缺失值比例超过这个阈值时,我们就删除这个特征。

def drop_missing(data, threshold):
    missing_data = data.isnull()
    columns_to_drop = []
    for column in missing_data.columns.values.tolist():
        missing_ratio = missing_data[column].mean()
        if missing_ratio > threshold:
            columns_to_drop.append(column)
    return data.drop(columns_to_drop, axis=1)

2. 填充缺失值

填充缺失值是一种更常用且更有效的处理方式。常见的填充方法有以下几种:

2.1 填充常数值

最简单的方法是用一个常数值填充缺失值,比如0、-1等。这种方法适用于那些缺失值占比很小的特征。

data.fillna(0)

2.2 填充平均值

对于数值型特征,可以用该特征的平均值来填充缺失值。

data.fillna(data.mean())

2.3 填充中位数

对于数值型特征,也可以用该特征的中位数来填充缺失值,这种方法对于异常值的鲁棒性更好。

data.fillna(data.median())

2.4 前向填充和后向填充

对于时间序列数据,可以使用前一个有效值(ffill)或后一个有效值(bfill)来填充缺失值。

data.fillna(method='ffill')
data.fillna(method='bfill')

2.5 使用模型预测填充

对于缺失值较多的特征,可以使用其他特征来预测缺失值。比如,可以使用回归模型来预测数值型特征的缺失值,使用分类模型来预测类别型特征的缺失值。

这种方法需要额外的数据预处理和模型训练,但通常能获得更好的填充效果。

3. 使用第三方库进行缺失值处理

除了上述方法,还可以使用一些第三方库来处理缺失值,比如missingno库可以可视化缺失值的分布,fancyimpute库提供了多种缺失值填充算法。

import missingno as msno
msno.matrix(data)

4. 小结

处理缺失值没有绝对正确的方法,需要根据具体的数据集和业务场景来选择合适的方法。一般来说,删除方法适用于缺失值占比很小的特征,填充方法适用于缺失值占比较大的特征。对于重要的特征,可以考虑使用模型预测填充。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号