7.9. 转换预测目标 (y
)#
这些转换器不适用于特征,只适用于监督学习目标。另请参阅 回归中的目标转换,如果你想为了学习而转换预测目标,但又想在原始(未转换)空间中评估模型。
7.9.1. 标签二值化#
7.9.1.1. LabelBinarizer#
LabelBinarizer
是一个工具类,用于帮助从多类别标签列表中创建标签指示矩阵
>>> from sklearn import preprocessing
>>> lb = preprocessing.LabelBinarizer()
>>> lb.fit([1, 2, 6, 4, 2])
LabelBinarizer()
>>> lb.classes_
array([1, 2, 4, 6])
>>> lb.transform([1, 6])
array([[1, 0, 0, 0],
[0, 0, 0, 1]])
使用这种格式可以在支持标签指示矩阵格式的估计器中启用多类别分类。
警告
如果你使用的估计器已经支持多类别数据,则无需使用 LabelBinarizer。
有关多类别分类的更多信息,请参阅多类别分类。
7.9.1.2. MultiLabelBinarizer#
在多标签学习中,二元分类任务的联合集用标签二元指示数组表示:每个样本是形状为 (n_samples, n_classes) 的二维数组中的一行,其中包含二元值,值为1(即非零元素)对应于该样本的标签子集。一个形如 np.array([[1, 0, 0], [0, 1, 1], [0, 0, 0]])
的数组表示第一个样本的标签0,第二个样本的标签1和2,以及第三个样本没有标签。
将多标签数据生成为标签集合的列表可能更直观。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]])
有关多标签分类的更多信息,请参阅多标签分类。
7.9.2. 标签编码#
LabelEncoder
是一个工具类,用于帮助规范化标签,使其只包含 0 到 n_classes-1 之间的值。这有时对于编写高效的 Cython 例程很有用。LabelEncoder
可以按如下方式使用
>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit([1, 2, 2, 6])
LabelEncoder()
>>> 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])
它还可以用于将非数值标签(只要它们是可哈希和可比较的)转换为数值标签。
>>> le = preprocessing.LabelEncoder()
>>> le.fit(["paris", "paris", "tokyo", "amsterdam"])
LabelEncoder()
>>> list(le.classes_)
[np.str_('amsterdam'), np.str_('paris'), np.str_('tokyo')]
>>> le.transform(["tokyo", "tokyo", "paris"])
array([2, 2, 1])
>>> list(le.inverse_transform([2, 2, 1]))
[np.str_('tokyo'), np.str_('tokyo'), np.str_('paris')]