zoukankan      html  css  js  c++  java
  • 机器学习实战基础(十):sklearn中的数据预处理和特征工程(三) 数据预处理 Preprocessing & Impute 之 缺失值

    缺失值

    机器学习和数据挖掘中所使用的数据,永远不可能是完美的。很多特征,对于分析和建模来说意义非凡,但对于实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要的字段缺失值很多,但又不能舍弃字段的情况。因此,数据预处理中非常重要的一项就是处理缺失值。

    import pandas as pd
    data = pd.read_csv(r"C:worklearnbettermicro-class
                        week 3 PreprocessingNarrativedata.csv",index_col=0)
     
    data.head()

    这里,我们使用从泰坦尼克号提取出来的数据,这个数据有三个特征,一个数值型,两个字符型,标签也是字符型。从这里开始,我们就使用这个数据给大家作为例子,让大家慢慢熟悉sklearn中数据预处理的各种方式。
    impute.SimpleImputer

    class sklearn.impute.SimpleImputer (missing_values=nan, strategy=’mean’, fill_value=None, verbose=0,
    copy=True)

    这个类是专门用来填补缺失值的。它包括四个重要参数:

    data.info()
    #填补年龄
     
    Age = data.loc[:,"Age"].values.reshape(-1,1)            #sklearn当中特征矩阵必须是二维
    Age[:20]
     
    from sklearn.impute import SimpleImputer
    imp_mean = SimpleImputer()                              #实例化,默认均值填补
    imp_median = SimpleImputer(strategy="median")           #用中位数填补
    imp_0 = SimpleImputer(strategy="constant",fill_value=0) #用0填补
     
    imp_mean = imp_mean.fit_transform(Age)                  #fit_transform一步完成调取结果
    imp_median = imp_median.fit_transform(Age)
    imp_0 = imp_0.fit_transform(Age)
     
    imp_mean[:20]
    imp_median[:20]
    imp_0[:20]
     
    #在这里我们使用中位数填补Age
    data.loc[:,"Age"] = imp_median
     
    data.info()
     
    #使用众数填补Embarked
    Embarked = data.loc[:,"Embarked"].values.reshape(-1,1)
    
    imp_mode = SimpleImputer(strategy = "most_frequent")
    data.loc[:,"Embarked"] = imp_mode.fit_transform(Embarked)
     
    data.info()

    BONUS:用Pandas和Numpy进行填补其实更加简单

    import pandas as pd
    data = pd.read_csv(r"C:worklearnbettermicro-classweek 3 
    PreprocessingNarrativedata.csv",index_col=0)
     
    data.head()
     
    data.loc[:,"Age"] = data.loc[:,"Age"].fillna(data.loc[:,"Age"].median())
    #.fillna 在DataFrame里面直接进行填补
     
    data.dropna(axis=0,inplace=True)
    #.dropna(axis=0)删除所有有缺失值的行,.dropna(axis=1)删除所有有缺失值的列
    #参数inplace,为True表示在原数据集上修改,为False生成一个复制对象,不改变原来的值,默认False
  • 相关阅读:
    (转)mybatis-plus入门
    (转)mybatis数据库物理分页插件PageHelper
    (转)mybatis热加载(依赖mybatis-plus插件)的实现
    The walking dead
    JDBC编程六部曲
    MySQL时区错误导致server time zone value 'Öйú±ê׼ʱ¼ä' 错误
    SpringMVC-Helloworld 的归纳理解
    Helloworld——SpringMVC
    starting Tomcat v8.5 at localhost has encountered a problem
    我的第一个SpringProject——HelloWorld
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12980575.html
Copyright © 2011-2022 走看看