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可以简单方便地将数据中的类别编码。

posted @   ColdCode  阅读(21194)  评论(0编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 用 C# 插值字符串处理器写一个 sscanf
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
AmazingCounters.com
点击右上角即可分享
微信分享提示