• [Scikit-Learn]


    reference : http://www.cnblogs.com/chaosimple/p/4153158.html

    关于缺失值(missing value)的处理

    在sklearn的preprocessing包中包含了对数据集中缺失值的处理,主要是应用Imputer类进行处理。

    首先需要说明的是,numpy的数组中可以使用np.nan/np.NaN(Not A Number)来代替缺失值,对于数组中是否存在nan可以使用np.isnan()来判定。

    使用type(np.nan)或者type(np.NaN)可以发现改值其实属于float类型,代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    >>> type(np.NaN)
    <type 'float'>
    >>> type(np.nan)
    <type 'float'>
    >>> np.NaN
    nan
    >>> np.nan
    nan

    因此,如果要进行处理的数据集中包含缺失值一般步骤如下:

    1、使用字符串'nan'来代替数据集中的缺失值;

    2、将该数据集转换为浮点型便可以得到包含np.nan的数据集;

    3、使用sklearn.preprocessing.Imputer类来处理使用np.nan对缺失值进行编码过的数据集。

    代码如下: 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> from sklearn.preprocessing import Imputer
    >>> imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
    >>> X=np.array([[1, 2], [np.nan, 3], [7, 6]])
    >>> Y=[[np.nan, 2], [6, np.nan], [7, 6]]
    >>> imp.fit(X)
    Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0)
    >>> imp.transform(Y)
    array([[ 4.        2.        ],
           [ 6.        3.66666667],
           [ 7.        6.        ]])


    上述代码使用数组X去“训练”一个Imputer类,然后用该类的对象去处理数组Y中的缺失值,缺失值的处理方式是使用X中的均值(axis=0表示按列进行)代替Y中的缺失值。

    当然也可以使用imp对象来对X数组本身进行处理。

    通常,我们的数据都保存在文件中,也不一定都是Numpy数组生成的,因此缺失值可能不一定是使用nan来编码的,对于这种情况可以参考以下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> line='1,?'
    >>> line=line.replace(',?',',nan')
    >>> line
    '1,nan'
    >>> Z=line.split(',')
    >>> Z
    ['1', 'nan']
    >>> Z=np.array(Z,dtype=float)
    >>> Z
    array([  1.,  nan])
    >>> imp.transform(Z)
    array([[ 1.        3.66666667]])

    上述代码line模拟从文件中读取出来的一行数据,使用nan来代替原始数据中的缺失值编码,将其转换为浮点型,然后使用X中的均值填补Z中的缺失值。

  • 相关阅读:
    Apollo的Oracle适配改动
    尝试Java,从入门到Kotlin(下)
    尝试Java,从入门到Kotlin(上)
    RabbitMQ权限控制原理
    一文彻底掌握二叉查找树(多组动图)(史上最全总结)
    图解:深度优先搜索与广度优先搜索及其六大应用
    图解:如何理解与实现散列表
    图解:什么是“图”?
    查找算法系列文(一)一文入门二叉树
    线性表(数组、链表、队列、栈)详细总结
  • 原文地址:https://www.cnblogs.com/viviancc/p/4199473.html
Copyright © 2020-2023  润新知