在机器学习领域,数据预处理是构建有效模型的关键步骤之一。它涉及到将原始数据转换为适合算法处理的格式。本文将介绍几种常用的数据预处理工具类,包括LabelBinarizer、MultiLabelBinarizer和LabelEncoder,它们在处理分类问题时尤为重要。
LabelBinarizer:多类标签转换
LabelBinarizer是一个辅助类,用于将多类标签列表转换为标签指示矩阵。这种格式对于支持标签指示矩阵格式的估计器来说,可以启用多类分类。例如,如果有一个包含1、2、6、4、2的标签列表,可以使用LabelBinarizer来生成对应的标签指示矩阵。
from sklearn import preprocessing
lb = preprocessing.LabelBinarizer()
lb.fit([1, 2, 6, 4, 2])
lb.classes_
array([1, 2, 4, 6])
lb.transform([1, 6])
array([[1, 0, 0, 0],
[0, 0, 0, 1]])
需要注意的是,如果使用的估计器已经支持多类数据,那么LabelBinarizer就不需要了。更多关于多类分类的信息,可以参考相关文档。
MultiLabelBinarizer:多标签学习
在多标签学习中,每个样本的标签集合可以用一个二进制指示数组来表示。例如,一个形状为(n_samples, n_classes)的2D数组,其中的非零元素对应于该样本的标签子集。MultiLabelBinarizer转换器可以用来在标签集合的集合和指示格式之间进行转换。
from sklearn.preprocessing import MultiLabelBinarizer
y = [[2, 3, 4], [2], [0, 1, 3], [0, 1, 2, 3, 4], [0, 1, 2]]
MultiLabelBinarizer().fit_transform(y)
array([[0, 0, 1, 1, 1],
[0, 0, 1, 0, 0],
[1, 1, 0, 1, 0],
[1, 1, 1, 1, 1],
[1, 1, 1, 0, 0]])
更多关于多标签分类的信息,可以参考相关文档。
LabelEncoder是一个辅助类,用于将标签标准化,使得它们只包含0到n_classes-1之间的值。这有时对于编写高效的Cython例程很有用。LabelEncoder可以这样使用:
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit([1, 2, 2, 6])
le.classes_
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])
LabelEncoder还可以用来将非数值标签(只要它们是可哈希和可比较的)转换为数值标签:
le = preprocessing.LabelEncoder()
le.fit(["paris", "paris", "tokyo", "amsterdam"])
list(le.classes_)
['amsterdam', 'paris', 'tokyo']
le.transform(["tokyo", "tokyo", "paris"])
array([2, 2, 1])
list(le.inverse_transform([2, 2, 1]))
['tokyo', 'tokyo', 'paris']