【发布时间】:2017-07-05 22:44:07
【问题描述】:
我正在尝试构建一个多标签的核心文本分类器。如here 所述,其想法是批量读取(大规模)文本数据集并将它们部分拟合到分类器。此外,当您有 here 所述的多标签实例时,我们的想法是以 One-Vs-All 的方式构建与数据集中类数一样多的二元分类器。
将 sklearn 的 MultiLabelBinarizer 和 OneVsRestClassifier 类与部分拟合相结合时,出现以下错误:
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
代码如下:
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.multiclass import OneVsRestClassifier
categories = ['a', 'b', 'c']
X = ["This is a test", "This is another attempt", "And this is a test too!"]
Y = [['a', 'b'],['b'],['a','b']]
mlb = MultiLabelBinarizer(classes=categories)
vectorizer = HashingVectorizer(decode_error='ignore', n_features=2 ** 18, non_negative=True)
clf = OneVsRestClassifier(MultinomialNB(alpha=0.01))
X_train = vectorizer.fit_transform(X)
Y_train = mlb.fit_transform(Y)
clf.partial_fit(X_train, Y_train, classes=categories)
您可以想象最后三行应用于每个小批量,为了简单起见,我删除了其中的代码。
如果您删除 OneVsRestClassifier 并仅使用 MultinomialNB,则代码运行良好。
【问题讨论】:
标签: python machine-learning scikit-learn multilabel-classification