我在使用scikit-learn
进行文本分类任务,我想了解是否有机器学习技术可以使用一对一、互斥的方式进行标签映射。
例如,假设我想根据城市对三份文档进行标记,可选的标签是纽约、底特律和洛杉矶。我的文档分别是“大苹果”、“大城市”和“天使之城”。假设在这个例子中,“天使之城”最接近洛杉矶,而“大苹果”和“大城市”都最接近纽约。但是,我想让一个映射到纽约(因为假设“大苹果”更适合),另一个映射到底特律,因为纽约标签已被使用,底特律是剩下的唯一选择,尽管它在某种程度上也合适。
我想告诉预测器,如果它已经使用了一个标签,就不能再次使用它,因此它需要对该标签做出最佳猜测,因为它只能使用一次。
scikit-learn
或其他库是否有处理这种一对一(且仅此一对一)的文本分类功能,就像我希望的那样?
回答:
为了实现这种功能,我建议你这样做:
我假设在你的文本分类算法中,你为每个文档获得了每个标签的概率得分。
例如:
文档 "大苹果" "大城市" "天使之城" 标签
"纽约" 0.45 0.45 0.1
"底特律" 0.4 0.5 0.1
"洛杉矶" 0.15 0.05 0.8
你现在可能已经明白我的意思了。
使用argmax函数(返回每个文档概率最大的标签)。
在这种情况下,argmax函数将为文档“大苹果”和“大城市”返回标签“纽约”,为文档“底特律”返回标签“大城市”,为文档“天使之城”返回标签“洛杉矶”。
由于在这种情况下分配标签“纽约”给文档时存在冲突(我宁愿不称之为冲突),因为你需要一对一的映射,所以我建议你转到下一个标签。标签“大城市”可以明确分配给文档“底特律”,因为它具有最大的概率(匹配),然后你从可能的标签集中移除标签“底特律”(剩余标签 -> “纽约”和“洛杉矶”)。然后你继续到下一个标签“洛杉矶”,argmax函数告诉你文档“天使之城”具有最高的概率(最大匹配)拥有标签“洛杉矶”。然后你从剩余标签中移除标签“洛杉矶”。此时,剩余标签 -> “纽约”。然后你转到下一个标签“纽约”,发现它只能分配给“大苹果”,这样你就实现了文档和标签之间的一对一映射。
我之前用两种方式做过这种操作,通过随机分配标签给文档来打破平局,或者通过计算下一个标签的概率来打破平局。这种技术也被用于决策树算法中,在树的给定层次寻找最合适的属性。它被称为该属性的熵或信息增益。这种实现是ID3决策树算法中信息增益的一个简化版本。
关于ID3决策树算法的更多信息,请点击这里。