LabelEncoder、LabelBinarizer、OneHotEncoder三者的区别

LabelEncoder、LabelBinarizer、OneHotEncoder三者的区别

import numpy as np
from sklearn.preprocessing import LabelEncoder, LabelBinarizer, OneHotEncoder
test_data = np.array(["a", "b", "c", "d", "a"])
print(LabelEncoder().fit_transform(test_data))

输出结果为:
[0 1 2 3 0]
产生结果为连续型特征。

print(LabelBinarizer().fit_transform(test_data))

输出结果为:
[[1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 1]
[1 0 0 0]]
默认直接返回一个密集的NumPy数组,通过使用sparse_output=True给LabelBinarizer构造函数,可以得到稀疏矩阵。

print(OneHotEncoder().fit_transform(test_data.reshape(-1, 1)))  # 输出是一个SciPy稀疏矩阵
print(OneHotEncoder().fit_transform(test_data.reshape(-1, 1)).toarray())    # 转换成一个密集的NumPy数组

输出结果为:
(0, 0) 1.0
(1, 1) 1.0
(2, 2) 1.0
(3, 3) 1.0
(4, 0) 1.0
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[1. 0. 0. 0.]]
使用LabelEncoder会以为两个相近的数字比两个较远的数字更为相似一些,为了解决这个问题,使用独热编码,即OneHot编码,得到的输出结果默认是稀疏矩阵,可以使用toarray()方法完成转换。

你可能感兴趣的:(机器学习,Python)