使用scikit-learn填充缺失值

在真实世界中的数据,难免会有缺失值的情况出现,可能是收集资料时没有收集到对应的信息,也可能是整理的时候误删除导致。对于包含缺失值的数据,有两大类处理思路
1. 删除包含缺失值的行和列,这样会导致特征和样本的减少,在样本和特征的个数很多,且包含缺失值的样本和特征较少的情况下,这种简单粗暴的操作还可以接受
2. 对缺失值进行填充,填充时就需要考虑填充的逻辑了,本质是按照不同的填充逻辑来估算缺失值对应的真实数据
在scikit-learn中,通过子模块impute进行填充,提功了以下几种填充方式

1. 单变量填充

这种方式只利用某一个特征的值来进行填充,比如特征A中包含了缺失值,此时可以将该缺失值填充为一个固定的常数,也可以利用所有特征A的非缺失值,来统计出均值,中位数等,填充对应的缺失值,由于在填充时,只需要考虑该特征对应的值,所以称之为单变量填充,代码如下
>>> from sklearn.impute import SimpleImputer
>>> imp = SimpleImputer(missing_values=np.nan, strategy='mean')
>>> X = np.array([[np.nan, 2], [6, np.nan], [7, 6]])
>>> X
array([[nan, 2.],
       [ 6., nan],
       [ 7., 6.]])
>>> imp.fit_transform(X)
array([[6.5, 2. ],
       [6. , 4. ],
       [7. , 6. ]])
除了均值以外,还支持中位数,众数,指定的常数进行填充,代码如下
>>> imp = SimpleImputer(missing_values=np.nan, strategy='mean')
>>> imp = SimpleImputer(missing_values=np.nan, strategy='median')
>>> imp = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
>>> imp = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=3)

2. 多变量填充

这种方式在填充时会考虑多个特征之间的关系,比如针对特征A中的缺失值,会同时考虑特征A和其他特征的关系,将其他特征作为自变量,特征A作为因变量,然后建模,来预测特征A中缺失值对应的预测值,通过控制迭代次数,将最后一次迭代的预测值作为填充值。

代码如下

>>> from sklearn.experimental import enable_iterative_imputer
>>> from sklearn.impute import IterativeImputer
>>> imp = IterativeImputer(max_iter=10, random_state=0)
>>> X = np.array([[np.nan, 2], [6, np.nan], [np.nan, 6]])
>>> X
array([[nan, 2.],
       [ 6., nan],
       [nan, 6.]])
>>> imp.fit_transform(X)
array([[6., 2.],
       [6., 4.],
       [6., 6.]])

这种方式非常灵活,在拟合的时候可以选择多种模型,以决策树回归模型为例,代码如下

>>> from sklearn.tree import DecisionTreeRegressor
>>> imp = IterativeImputer(DecisionTreeRegressor(), max_iter=10, random_state=0)

3. KNN填充

K近邻填充,首先根据欧几里得距离计算与缺失值样本距离最近的K个样本,计算的时候只考虑非缺失值对应的维度,然后用这K个样本对应维度的均值来填充缺失值,代码如下

>>> from sklearn.impute import KNNImputer
>>> X = np.array([[1, 2, np.nan], [3, 4, 3], [np.nan, 6, 5], [8, 8, 7]])
>>> X
array([[ 1., 2., nan],
       [ 3., 4., 3.],
       [nan, 6., 5.],
       [ 8., 8., 7.]])
>>> imputer = KNNImputer(n_neighbors=2, weights="uniform")
>>> imputer.fit_transform(X)
array([[1. , 2. , 4. ],
       [3. , 4. , 3. ],
       [5.5, 6. , 5. ],
       [8. , 8. , 7. ]])
对于第一列第三行的nan,首先计算该样本距离最近的两个样本,分别为第二行和第四行的样本,然后取3和8的均值,即5.5进行填充;接下来填充第一行第三列的难,计算最近的两个样本,分别是第2行和第3行,所以用3和5的均值,4进行填充。

在实际分析中,缺失值填充的算法还有很多,但是在scikit-learn中,主要就是集成了这3种填充方法。

·end·
(0)

相关推荐

  • 25000字玩转 Pandas, 这一篇给力了!

    作者:Ma Sizhou https://blog.csdn.net/weixin_45901519/article/details/112980822 1.Pandas数据结构 2008年WesMc ...

  • 人工智能基础课堂纪要3

    5.2 基本数据操作 1.索引操作 1.直接 -- 先列后行 2.loc -- 先行后列,索引值 3.iloc -- 先行后列,索引值的下标 4.ix -- 先行后列,混合索引 2.赋值操作 1.对象 ...

  • Python Pandas缺失值处理

    在一些数据分析业务中,数据缺失是我们经常遇见的问题,缺失值会导致数据质量的下降,从而影响模型预测的准确性,这对于机器学习和数据挖掘影响尤为严重.因此妥善的处理缺失值能够使模型预测更为准确和有效. 为什 ...

  • pandas骚操作:transform 数据转换的 4 个常用技巧!

    来源:Python数据科学 作者:东哥起飞 大家好,我是东哥. 本篇是pandas100个骚操作系列的第 8 篇:transform 数据转换的 4 个常用技巧! 系列内容,请看

  • scikit learn中PCA的使用方法

    前言 前两篇文章介绍了PCA(主成分分析方法)和SVD(奇异值分解)的算法原理,本文基于scikit learn包介绍了PCA算法在降维和数据重构的应用,并分析了PCA类与sparsePCA类的区别. ...

  • 在R语言中进行缺失值填充:估算缺失值

    原文链接:http://tecdat.cn/?p=8287 介绍 缺失值被认为是预测建模的首要障碍.因此,掌握克服这些问题的方法很重要. 估算缺失值的方法的选择在很大程度上影响了模型的预测能力.在大多 ...

  • 在Photoshop里用填充图层蒙版制作扇形及套版

    在Photoshop里用填充图层蒙版制作扇形及套版

  • TcYJK修正框剪中墙体填充的错误

    TcYJK,修正插件在YJK3.0版施工图中一个小错误,修正原来一直存在的框剪中墙体填充的错误. TcYJK,修正插件在YJK3.0版施工图中一个小错误,修正原来一直存在的框剪中墙体填充的错误. 展开

  • 办公必备技能:在Excel多单元格中一次性填充相同内容

    场景如图:需要在B列中,都填充"陈晨".如何快速实现填充? 方法一:双击实现快速填充.鼠标放在单元格右下角,变为十字,双击,即可完成快速填充. 方法二:直接拖拽的方法. 非连续单元 ...

  • 关于CAD 实体填充不显示,只显示轮廓线的问题?

    问题描述:关于CAD 实体填充不显示,只显示轮廓线的问题? 1. PL(多段线)在绘制以及显示的时候,原本实体填充的线段变成了,这样的一个空心显示: 2.尺寸的建筑标记,在绘制以及显示时,原本实体填充 ...

  • excel如何快速填充奇偶数

    excel的自动填充柄可以给我们制作表格时带来很大的便利,比如说可以帮助我们快速填充奇偶数.那么,具体该怎么操作呢?下面就让小编来阐述一下. 1.打开一个空白的excel表格. 2.在表格中分别输入奇 ...

  • Excel办公应用:间断序号填充的问题

    Excel办公应用:间断序号填充的问题

  • Excel2016中奇偶行填充不同颜色的方法

    在Excel工作表中,为了美化工作表,可以为单元格填充颜色.当需要为相邻的行添加不同颜色时,可以使用条件格式来进行操作,以快速获得需要的效果.本文图文详解在Excel2016工作表中实现奇偶行填充不同 ...