在实例化一个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所说,只有
fit
和fit_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
"""