机器学习中如何处理缺失数据(NAN和Ifo)?

机器学习中如何处理缺失数据(NAN)?

文章目录:

  • 一、NAN 和 Inf
  • 二、机器学习中空值的处理方法

一、NAN 和 Inf

NAN(Not A number):意思:不是一个数字,是一个空值

Inf(Infinity 英 /ɪn’fɪnɪtɪ/ 美 /ɪn’fɪnəti/ ):意识是:无穷、无穷大

在使用numpy数组的过程中时常会出现nan或者inf的元素,可能会造成数值计算时的一些错误。这里提供一个numpy库函数的用法,使nan和inf能够最简单地转换成相应的数值。

  1. numpy.nan_to_num(x): 函数就是把nan和inf数值转换成数值

使用0代替数组x中的nan元素,使用有限的数字代替inf元素

>>>import numpy as np
>>> a = np.array([[np.nan,np.inf],\
...               [-np.nan,-np.inf]])
>>> a
array([[  nan,   inf],
       [  nan,  -inf]])
>>> np.nan_to_num(a)
array([[ 0.00000000e+000,  1.79769313e+308],
       [ 0.00000000e+000, -1.79769313e+308]])
  1. 判断是否为空值和无穷值的函数
  • isinf
  • isneginf
  • isposinf
  • isnan
  • isfinite

使用方法也很简单,以isnan举例说明:

>>> import numpy as np
>>> np.isnan(np.array([[1, np.nan, np.inf],\
...               [np.nan, -np.inf, -0.25]]))
array([[False,  True, False],
       [ True, False, False]], dtype=bool)
  1. pandas也有判断是否为空值的函数
>>> import pandas as pd
>>> pd.isnull(np.nan)
True

#同样的pd.notnull()用来判断不为nan值

二、机器学习中空值的处理方法

目前有三类处理方法:

  1. 用平均值、中值、分位数、众数、随机值等替代。效果一般,因为等于人为增加了噪声。

  2. 用其他变量做预测模型来算出缺失变量。效果比方法1略好。有一个根本缺陷,如果其他变量和缺失变量无关,则预测的结果无意义。如果预测结果相当准确,则又说明这个变量是没必要加入建模的。一般情况下,介于两者之间。

  3. 最精确的做法,把变量映射到高维空间。比如性别,有男、女、缺失三种情况,则映射成3个变量:是否男、是否女、是否缺失。连续型变量也可以这样处理。比如Google、百度的CTR预估模型,预处理时会把所有变量都这样处理,达到几亿维。这样做的好处是完整保留了原始数据的全部信息、不用考虑缺失值、不用考虑线性不可分之类的问题。缺点是计算量大大提升。
    而且只有在样本量非常大的时候效果才好,否则会因为过于稀疏,效果很差。

Reference:
1、https://www.zhihu.com/question/26639110
2、https://blog.csdn.net/xiaodongxiexie/article/details/54352889


如果你觉得对你有帮助,希望你可以打赏知识!

支付宝收款码
微信收款码

如果你热衷技术,想寻找志同道合的伙伴,欢迎加入我们!

微信交流
QQ技术交流群

你可能感兴趣的:(18—np,pd,plt的使用)