gpt4 book ai didi

python - 使用 NLTK、scikit-learn 和 OneVsRestClassifier 打开多标签分类

转载 作者:行者123 更新时间:2023-11-28 22:37:48 25 4
gpt4 key购买 nike

免责声明:我对 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 或更多标签。我怎样才能做到这一点?

遗憾的是,我不能只初始化分类器,告诉它是一个多标签分类器,documentation说:

此策略也可用于多标签学习,其中分类器 用于预测多个标签,例如,通过拟合二维矩阵 如果样本 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

最佳答案

文档试图说明的是,使用二维矩阵作为目标。所以基本上,你的训练集可以是,

training_set = [
[{"car": True, ...}, [is_label_1, is_label_2, is_label_3]],
[{"car": False, ...}, [is_label_1, is_label_2, is_label_3]],
...
[{"car": False, ...}, [is_label_1, is_label_2, is_label_3]],
]

对于特定样本,使用多个标签对其进行训练,例如对于第一个样本,如果存在标签 1 和标签 3,则将其作为 [1, 0, 1] 传递。

希望,答案对您来说很清楚。

关于python - 使用 NLTK、scikit-learn 和 OneVsRestClassifier 打开多标签分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36202522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com