对Python数据处理中的LabelEncoder和OneHotEncoder详解
在Python中进行数据处理时,经常需要对文本类型的变量进行编码处理,以便于算法模型能够识别。其中,LabelEncoder和OneHotEncoder是两种常用的编码方式。下面详细讲解这两种编码方式的使用方法和区别。
1. LabelEncoder
LabelEncoder属于序号编码,即将类别型变量的不同取值赋以序号标签,将文本转换为数字,使得算法模型能够进行计算。我们可以使用sklearn中的LabelEncoder函数进行编码。下面是LabelEncoder函数的使用方法:
# 导入模块
from sklearn.preprocessing import LabelEncoder
# 创建LabelEncoder对象
le = LabelEncoder()
# 对文本类型数据进行编码
le.fit_transform(["男", "女", "女", "男"])
输出结果:
array([1, 0, 0, 1])
可以看到,LabelEncoder将"男"编码为1,"女"编码为0,对于相同的文本值进行编码后得到相同的数字。
2. OneHotEncoder
OneHotEncoder又称为独热编码,是一种将分类变量用于数值计算的编码方式。首先将每个分类变量的取值转换为一个二元变量,然后将每个二元变量赋予一个0或1的值,表示该变量是否存在。我们可以使用sklearn中的OneHotEncoder函数进行编码。下面是OneHotEncoder函数的使用方法:
# 导入模块
from sklearn.preprocessing import OneHotEncoder
# 创建OneHotEncoder对象
ohe = OneHotEncoder(sparse=False)
# 对文本类型数据进行编码(需要先进行LabelEncoder)
le = LabelEncoder()
gender = le.fit_transform(["男", "女", "女", "男"])
ohe.fit_transform(gender.reshape(-1, 1))
输出结果:
array([[0., 1.],
[1., 0.],
[1., 0.],
[0., 1.]])
可以看到,OneHotEncoder将"男"编码为[0, 1],"女"编码为[1, 0],对于相同的文本值进行编码后得到不同的数字组合。这样,我们就可以将经过OneHotEncoder编码处理后的数据作为算法模型的输入。
3. 示例说明
下面通过示例说明LabelEncoder和OneHotEncoder的应用。
示例1:LabelEncoder
假设我们要对一个鸢尾花数据集中的类别列Species进行LabelEncoder编码,以便于使用算法模型对其进行训练。
# 导入模块和数据集
from sklearn.datasets import load_iris
from sklearn.preprocessing import LabelEncoder
# 加载iris数据集
iris = load_iris()
# 打印数据集前5条数据
print(iris.data[:5])
print(iris.target[:5])
# 创建LabelEncoder对象
le = LabelEncoder()
# 对Species列进行编码
iris_target_encoded = le.fit_transform(iris.target)
# 查看编码结果
print(iris_target_encoded[:5])
输出结果:
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]]
[0 0 0 0 0]
[0 0 0 0 0]
可以看到,我们使用LabelEncoder将鸢尾花数据集中的类别列进行了编码处理。
示例2:OneHotEncoder
假设我们要对一个蘑菇数据集中的类别列cap-shape进行OneHotEncoder编码,以便于使用算法模型对其进行训练。
# 导入模块和数据集
import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# 加载mushrooms数据集
df = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/agaricus-lepiota.data", header=None)
# 打印数据集前5条数据
print(df.head())
# 对第5列进行LabelEncoder编码
le = LabelEncoder()
df[5] = le.fit_transform(df[5])
# 对第5列进行OneHotEncoder编码
ohe = OneHotEncoder(sparse=False)
df_ohe = ohe.fit_transform(df[5].values.reshape(-1, 1))
# 查看编码结果
print(df_ohe[:5])
输出结果:
0 1 2 3 4 5 6 7 8 9 ... 13 14 15 16 17 18 19 20 21 22
0 p x s n t p f c n k ... s w w p w o p k s u
1 e x s y t a f c b k ... s w w p w o p n n g
2 e b s w t l f c b n ... s w w p w o p n n m
3 p x y w t p f c n n ... s w w p w o p k s u
4 e x s g f n f w b k ... s w w p w o e n a g
[5 rows x 23 columns]
[[0. 1. 0. 0. 0. 0. 0.]]
可以看到,我们使用OneHotEncoder对蘑菇数据集中的cap-shape列进行了编码处理,得到了包含7个数字的编码结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对python 数据处理中的LabelEncoder 和 OneHotEncoder详解 - Python技术站