如何执行具有特定维数的 MultiLabelBinarizer?

how to perform MultiLabelBinarizer with specific number of dimension?

我想知道是否有一种方法可以在特定维度的 sklearn 中执行 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)

We will get the dimension 5 as the existed numbers are 0,1..,4

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]])

我的问题是我们怎样才能得到这个数组的具体维数,例如第 6 维,所以答案应该是:

array([[0, 0, 1, 1, 1, 0],
       [0, 0, 1, 0, 0, 0],
       [1, 1, 0, 1, 0, 0],
       [1, 1, 1, 1, 1, 0],
       [1, 1, 1, 0, 0, 0]])

在 sklearn 或 python 中的其他方法或模块中有没有一种方法可以轻松处理这种期望的结果,或者我们可以通过自己的算法创建这种数组?

对此有任何想法将不胜感激。谢谢

MultiLabelBinarizer 接受参数 classes,您可以在其中指示要查找的 classes 的顺序。提供不在原始数组中的 class 将增加 0 个条目的额外维度:

from sklearn.preprocessing import MultiLabelBinarizer


y = [[2, 3, 4], [2], [0, 1, 3], [0, 1, 2, 3, 4], [0, 1, 2]]

MultiLabelBinarizer(classes=[0, 1, 2, 3, 4, 5]).fit_transform(y)

# output
>>>[[0 0 1 1 1 0]
 [0 0 1 0 0 0]
 [1 1 0 1 0 0]
 [1 1 1 1 1 0]
 [1 1 1 0 0 0]]

请注意,由于该参数实际上是为了指示 classes 的顺序,因此您提供的顺序很重要。此外,当提供的 classes 太少时,未知的 classes 将被忽略并且不会出现在转换后的数组中。