免责声明:我对 AI、Python、NLTK 和 scikit-learn 还是很陌生。
我正在尝试训练分类器将一组文档分类为一组标签。
我正在使用 NLTK 包装器与 scikit-learn 的 OneVsRestClassifier 对话。
training_set = [
[{"car": True, ...}, "Label 1"],
[{"car": False, ...}, "Label 2"],
...
[{"car": False, ...}, "Label 1"],
]
ovr = SklearnClassifier(OneVsRestClassifier(MultinomialNB()))
ovr.train(training_set)
这适用于多类分类,分类器尝试仅将文档分类为标签。准确度很好,但我希望分类器为文档分配 0、1 或更多标签。我怎样才能做到这一点?
可悲的是,我不能只初始化分类器,告诉它是一个多标签分类器,文档说:
该策略也可用于多标签学习,其中分类器用于预测多个标签,例如,通过拟合一个二维矩阵,其中如果样本 i 具有标签 j,则单元格 [i, j] 为 1,否则为 0。
这对我来说不是很清楚,因为我不熟悉这种语言。我有一种感觉,我必须以这样一种方式塑造我的训练集,以便分类器能够理解我希望它对我的数据进行多标签分类?如果是,如何?
我试图在数组中提供标签,如下所示:
training_set = [
[{"car": True, ...}, ["Label 1"]],
[{"car": False, ...}, ["Label 2"]],
...
[{"car": False, ...}, ["Label 1"]],
]
这没有按预期工作并提出:
DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
y = column_or_1d(y, warn=True)
One-vs-rest accuracy percent: 0.0