在训练模型之前,我们通常都要对训练数据进行一定的处理。将类别编号就是一种常用的处理方法,比如把类别“男”,“女”编号为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可以简单方便地将数据中的类别编码。

sklearn.preprocessing.LabelEncoder的使用的更多相关文章

  1. 11.sklearn.preprocessing.LabelEncoder的作用

    In [5]: from sklearn import preprocessing ...: le =preprocessing.LabelEncoder() ...: le.fit(["p ...

  2. 利用sklearn的LabelEncoder对标签进行数字化编码

    from sklearn.preprocessing import LabelEncoder def gen_label_encoder(): labels = ['BB', 'CC'] le = L ...

  3. pandas 下的 one hot encoder 及 pd.get_dummies() 与 sklearn.preprocessing 下的 OneHotEncoder 的区别

    sklearn.preprocessing 下除了提供 OneHotEncoder 还提供 LabelEncoder(简单地将 categorical labels 转换为不同的数字): 1. 简单区 ...

  4. 数据规范化——sklearn.preprocessing

    sklearn实现---归类为5大类 sklearn.preprocessing.scale()(最常用,易受异常值影响) sklearn.preprocessing.StandardScaler() ...

  5. 【sklearn】数据预处理 sklearn.preprocessing

    数据预处理 标准化 (Standardization) 规范化(Normalization) 二值化 分类特征编码 推定缺失数据 生成多项式特征 定制转换器 1. 标准化Standardization ...

  6. sklearn.preprocessing.LabelBinarizer

    sklearn.preprocessing.LabelBinarizer

  7. sklearn preprocessing (预处理)

    预处理的几种方法:标准化.数据最大最小缩放处理.正则化.特征二值化和数据缺失值处理. 知识回顾: p-范数:先算绝对值的p次方,再求和,再开p次方. 数据标准化:尽量将数据转化为均值为0,方差为1的数 ...

  8. sklearn学习笔记(一)——数据预处理 sklearn.preprocessing

    https://blog.csdn.net/zhangyang10d/article/details/53418227 数据预处理 sklearn.preprocessing 标准化 (Standar ...

  9. sklearn.preprocessing.StandardScaler 离线使用 不使用pickle如何做

    Having said that, you can query sklearn.preprocessing.StandardScaler for the fit parameters: scale_ ...

随机推荐

  1. JS堆栈与拷贝

    一.堆栈的定义 1.栈是一种特殊的线性表.其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行. 结论:后进先出(Last In First Out),简称为LIFO线性表.栈的应用有:数制 ...

  2. mod_wsgi 的两种模式

    mod_wsgi 的两种模式 http://ssmax.net/archives/977.html http://www.cnblogs.com/yuxc/p/3555005.html mod_wsg ...

  3. Android开发技巧——ViewPager加View情况封装PagerAdapter的实现类

    ViewPager是Android的support库中的一个控件. ViewPager + Fragment的使用,已经有FragmentAdapter的实现可以帮助我们快速进行开发了: ViewPa ...

  4. AJAX请求 $.ajaxSetup方法的使用:设置AJAX请求的默认参数选项,当程序中需要发起多个AJAX请求时,则不用再为每一个请求配置请求的参数

    定义和用法ajaxSetup() 方法为将来的 AJAX 请求设置默认值.语法$.ajaxSetup({name:value, name:value, ... }) 该参数为带有一个或多个名称/值对的 ...

  5. js实现页面遮罩层,并且阻止页面body滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. numpy中 array数组的shape属性

    numpy.array 的shape属性理解 在码最邻近算法(K-Nearest Neighbor)的过程中,发现示例使用了numpy的array数组管理,其中关于array数组的shape(状态)属 ...

  7. 嵌入式系统C编程之堆栈回溯

    前言 在嵌入式系统C语言开发调试过程中,常会遇到各类异常情况.一般可按需添加打印信息,以便观察程序执行流或变量值是否异常.然而,打印操作会占用CPU时间,而且代码中添加过多打印信息时会显得很凌乱.此外 ...

  8. class_create(),device_create自动创建设备文件结点【转】

    本文参考来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhenwenxian/archive/2010/03/28/5424434.aspx 本文转自:http://ww ...

  9. 获取静态 selected的当前的value的值

    <!DOCTYPE html><html><head><script>function checkField(val){alert("输入值已 ...

  10. html5学习第一天

    1.语义标签解决方案 <video></video> 属性: controls 显示控制栏 autoplay 自动播放 loop  设置循环播放 多媒体标签在网页中的兼容效果方 ...