在实例化一个MultiLabelBinarizer之后,我需要它的inverse_transform方法来生成我在别处构建的矩阵。
不幸的是,

import numpy as np
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer(classes=['a', 'b', 'c'])

A = np.array([[1, 0, 0], [1, 0, 1], [0, 1, 0], [1, 1, 1]])
y = mlb.inverse_transform(A)

产量AttributeError: 'MultiLabelBinarizer' object has no attribute 'classes_'
我注意到如果我在mlb的实例化之后添加这一行,
mlb.fit_transform([(c,) for c in ['a', 'b', 'c']])

错误消失了我猜这是因为fit_transform设置了classes_属性的值,但是我希望它在实例化时完成,因为我提供了一个classes参数。
我使用的是sklearn版本0.17.1和python 2.7.6。
我做错什么了吗?

最佳答案

如果要在classes_的实例中设置属性MultiLabelBinarizer,还可以执行如下快速操作:

mlb = MultiLabelBinarizer().fit(['a', 'b', 'c'])

因为正如marmouset所说,只有fitfit_transorm才适合classes_属性。此外,scikit-learn.orghttp://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MultiLabelBinarizer.html的文档明确指定方法fit可以返回MultiLabelBinarizer的实例。
def fit(self, y):
    """Fit the label sets binarizer, storing `classes_`
    Parameters
    ----------
    y : iterable of iterables
        A set of labels (any orderable and hashable object) for each
        sample. If the `classes` parameter is set, `y` will not be
        iterated.
    Returns
    -------
    self : returns this MultiLabelBinarizer instance
    """

09-25 19:56