• sklearn.preprocessing.LabelEncoder的使用


    在训练模型之前,我们通常都要对训练数据进行一定的处理。将类别编号就是一种常用的处理方法,比如把类别“男”,“女”编号为0和1。可以使用sklearn.preprocessing中的LabelEncoder处理这个问题。

    作用

    将n个类别编码为0~n-1之间的整数(包含0和n-1)。

    例子

    假设我们要对性别数据进行编码,则数据可以分为两种情况:无NaN,有NaN。
    首先导入要使用的包

    import numpy as np
    import pandas as pd 
    from sklearn import preprocessing
    

    无NaN

    数据如下

    sex = pd.Series(["male", "female", "female", "male"])
    

    使用LabelEncoder进行处理,过程如下

    le = preprocessing.LabelEncoder()    #获取一个LabelEncoder
    le = le.fit(["male", "female"])      #训练LabelEncoder, 把male编码为0,female编码为1
    sex = le.transform(sex)                #使用训练好的LabelEncoder对原数据进行编码
    print(sex)
    

    输出:

    [1 0 0 1]
    

    可以看到LabelEncoder将源数据中用字符串表示的类别编码成int型的数字,便于训练。
    根据编码后的类别还可以获取编码前的类别:

    le.inverse_transform([1,0,0,1])
    

    输出:

    array(['male', 'female', 'female', 'male'], dtype='<U6')
    

    有NaN

    假如数据中包含NaN,如下

    sex = pd.Series(["male", "female", "female", np.nan])
    

    这时执行

    le = preprocessing.LabelEncoder()    #获取一个LabelEncoder
    le = le.fit(["male", "female"])      #训练LabelEncoder, 把male编码为0,female编码为1
    sex = le.transform(sex)                #使用训练好的LabelEncoder对原数据进行编码
    print(sex)
    

    就会出错

    ValueError: y contains previously unseen labels: nan
    

    解决方法也很简单,只要把NaN替换掉就行了

    sex.fillna("unknown", inplace=True)
    
    le = preprocessing.LabelEncoder()    #获取一个LabelEncoder
    le = le.fit(["male", "female", "unknown"])      #训练LabelEncoder, 把male编码为0,female编码为1, unknown为2
    sex = le.transform(sex)                #使用训练好的LabelEncoder对原数据进行编码
    print(sex)
    

    输出:

    [1 0 0 2]
    

    这里将NaN替换为unkown,将unknown加入le.fit中,这样unknown就会被编码为2了。

    总结

    sklearn.preprocessing.LabelEncoder可以简单方便地将数据中的类别编码。

  • 相关阅读:
    一场由空格引发的错误数据
    ECS服务器搭建Discuz 邮箱设置,报错处理
    MS SQL CASE WHEN 的用法
    sql prompt 缩写 快捷键
    CentOS 防火墙
    docker swarm
    docker machine
    docker-compose 配置
    docker-compsoe & .netcore & nginx
    dockerfile
  • 原文地址:https://www.cnblogs.com/sench/p/10134094.html
Copyright © 2020-2023  润新知