- 类 LabelEncoder
- 类属性及类方法
- 示例
- 用法
- 用于大型数据集
类 LabelEncoder
LabelEncoder
是 scikit-learn
中的一个预处理工具,用于将类别变量(例如字符串标签或离散的整数标签)转换为整数。
类 LabelEncoder
在包 sklearn.preprocessing.LabelEncoder
中,使用 0 0 0 到 n _ c l a s s e s − 1 n\_classes-1 n_classes−1 之间的值对目标标签进行编码。
此转换器应用于对目标值(即 y y y)进行编码,而不是对输入 x x x 进行编码。
OrdinalEncoder
:使用序数编码方案对分类特征进行编码。OneHotEncoder
:将分类特征编码为独热数字数组。
类属性及类方法
类属性:classes_
保存每个类别的标签。
主要类方法:
fit(y)
:
fit
方法用于拟合(训练)一个LabelEncoder
对象,以适应给定的类别数据 y y y。- 在拟合过程中,
LabelEncoder
会计算类别的唯一值,并将其映射到整数标签。 - 例如,如果 y y y 是
[1, 2, 2, 6]
,fit
方法会计算出唯一的类别[1, 2, 6]
。
transform(y)
:
transform
方法用于将给定的类别数据 y y y 转换为整数标签。- 它根据之前拟合的
LabelEncoder
对象,将类别变量映射到整数。 - 例如,如果 y y y 是
[1, 1, 2, 6]
,transform
方法会将其转换为[0, 0, 1, 2]
。
fit_transform(y)
:
fit_transform
方法是fit
和transform
的组合。- 它先拟合一个
LabelEncoder
对象,然后将给定的类别数据 y y y 转换为整数标签。
inverse_transform(y)
:
- 用于将数字编码转换回原始的分类变量。
示例
首先,准备好数据并使用 LabelEncoder
对数据集进行编码。
from sklearn.preprocessing import LabelEncoderdata = ['小猫', '小猫', '小狗', '小狗', '兔子', '兔子']le = preprocessing.LabelEncoder()
encoded_data = le.fit_transform(data)
print(encoded_data) # 输出:[0, 0, 1, 1, 2, 2]
使用 inverse_transform
方法,可以根据编码后的类别反向推导出编码前对应的原始标签:
print(le.inverse_transform([0, 1, 2])) # 输出:['小猫', '小狗', '兔子']
用法
LabelEncoder
可用于规范化标签。
>>> from sklearn.preprocessing import LabelEncoder
>>> le = LabelEncoder() # 创建一个LabelEncoder对象
>>> le.fit([1, 2, 2, 6]) # 将编码器拟合到给定的类别
LableEncoder()
>>> le.classes_ # 显示拟合后的类别(unique)
array([1, 2, 6])
>>> le.transform([1, 1, 2, 6]) # 将给定的类别转换为整数
array([0, 0, 1, 2]...)
>>> le.inverse_transform([0, 0, 1, 2]) # 将整数逆转换回原始类别
array([1, 1, 2, 6])
它还可用于将非数字标签(只要它们是可散列和可比较的)转换为数字标签。
>>> le = LabelEncoder()
>>> le.fit(["paris", "paris", "tokyo", "amsterdam"])
LabelEncoder()
>>> list(le.classes_)
['amsterdam', 'paris', 'tokyo']
>>> le.transform(["tokyo", "tokyo", "paris"]) # Transform Categories Into Integers
array([2, 2, 1]...)
>>> list(le.inverse_transform([2, 2, 1])) # Transform Integers Into Categories
['tokyo', 'tokyo', 'paris']
用于大型数据集
LableEncoder
用于数据预处理,将分类变量转换为数值编码。
from sklearn.preprocessing import LabelEncoderle = LabelEncoder()
for column in train.columns:if train[column].dtype == 'object':train[column] = le.fit_transform(train[column])test[column] = le.transform(test[column])
遍历 train
数据集中的每一列,对于每一列,检查它的数据类型是否为 object
,即是否为字符串或其他非数值类型。
如果是分类变量,执行以下操作:
- 使用
le.fit_transform(train[column])
将该列的值进行数值编码。fit_transform
方法会学习该列的不同类别,并将每个类别映射到一个唯一的整数标签。这样,原本的字符串类别就被转换成了整数。 - 然后,对
test
数据集中相应的列执行相同的操作,但是这里只使用le.transform(test[column])
,因为已经在训练集上学习了类别映射,不需要再次拟合。