您正在传递 y_train 转换自MultiLabelBinarizer
其形式为 [[1, 1, 0], [0, 1, 0], [1, 1, 0]],但将类别传递为['a','b','c']
然后通过这行代码 https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/multiclass.py#L260:-
if np.setdiff1d(y, self.classes_):
raise ValueError(("Mini-batch contains {0} while classes " +
"must be subset of {1}").format(np.unique(y),
self.classes_))
这会产生一个布尔值数组,例如 [False, True, ..]。if
无法将此类数组作为单个真值处理,因此会出现错误。
首先,您应该以与以下内容相同的数字格式传递类:Y_train
。
现在即使你这样做了,那么内部的label_binarizer_OneVsRestClassifier 的 http://scikit-learn.org/stable/modules/generated/sklearn.multiclass.OneVsRestClassifier.html#sklearn.multiclass.OneVsRestClassifier将决定它是“多类”类型而不是multilabel
然后将拒绝正确地转换类。我认为这是 OneVsRestClassifer 和/或 LabelBinarizer 中的一个错误。
请向 scikit-learn github 提交问题partial_fit
看看会发生什么。
Update显然,从目标向量 (y) 决定“多标签”或“多类”是 scikit-learn 上当前持续存在的问题,因为它存在很多复杂性。
- https://github.com/scikit-learn/scikit-learn/issues/7665 https://github.com/scikit-learn/scikit-learn/issues/7665
- https://github.com/scikit-learn/scikit-learn/issues/5959 https://github.com/scikit-learn/scikit-learn/issues/5959
- https://github.com/scikit-learn/scikit-learn/issues/7931 https://github.com/scikit-learn/scikit-learn/issues/7931
- https://github.com/scikit-learn/scikit-learn/issues/8098 https://github.com/scikit-learn/scikit-learn/issues/8098
- https://github.com/scikit-learn/scikit-learn/issues/7628 https://github.com/scikit-learn/scikit-learn/issues/7628
- https://github.com/scikit-learn/scikit-learn/pull/2626 https://github.com/scikit-learn/scikit-learn/pull/2626