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  阅读(21211)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
AmazingCounters.com
点击右上角即可分享
微信分享提示