我有一个用层次结构中的标签注释的句子数据集。层次结构是音乐类型的选择。它是一棵树,而不是DAG - 每个节点只有一个父节点和一个父节点。这是一个摘录作为例子:
root = music
parent = latin
child = afro-cuban
child = salsa
child = brazilian
child = axe
parent = non-latin
child = classical
...
对于句子Mozart is the best
,例如,从收集的注释中,大多数人同意该句子或基本事实的类别标签是classical
。从层次结构中,我们知道classical
也是non-latin
音乐的一种形式,它是music
的一种形式。而i prefer salsa
可能已被注释为latin
。
在分类方面,扁平化层次结构 - 我已经完成 - 直观地解决了问题,因为我们完全无视类层次结构。在使用Weka和一系列分类器时,它也会产生较低的结果,因为我们面临着多类分类问题。
我的问题是,我已经阅读了关于如何实施分层分类的非常模糊的文献和在线文章。我想使用Weka和Python。但我只想澄清在这种情况下如何进行分层分类。所以我的问题是:
1)解决这个问题的最佳建议是什么?实施自上而下的方法是最佳选择吗?如果我这样做,如何避免在每个级别上分类错误的问题?即,它可以在级别1上预测latin
,在级别2上预测classical
。那么二元分类器呢?我愿意接受建议。
2)培训和测试数据是如何形成的?
3)如何评估分类性能?特别是采用自上而下的方法,因为我们将对每个单独的级别进行评估。
答案 0 :(得分:2)
这个survey article很好地解释了分层分类的各种策略。
您可以通过控制用于训练每个子分类器的训练数据来阻止不一致的预测,例如您给出的latin->经典示例。例如,您首先训练二元分类器以区分拉丁语和非拉丁语,使用所有数据进行训练。然后训练分类器,仅使用这两个类中的例子作为训练数据来区分非洲古巴人和巴西人。在推理时,如果拉丁语/非拉丁语分类器预测“拉丁语”,你只会将一个未标记的例子传递给非洲古巴/巴西分类器。
答案 1 :(得分:1)
按层次结构组织类,创建类别的树或DAG(有向无环图),利用它们之间关系的信息。
我们采用所谓的自上而下的方法,训练树的每个级别(或节点)的分类器(同样,虽然这不是唯一的分层方法,但它绝对是最广泛使用的,我们的'已经选择了我们手头的问题),在这个问题上,一个特定的决定将导致我们走向不同的分类路径。
音乐示例来自以下链接的博客地点: 我们首先通过训练分类器来预测,比如说,音乐的类型(死亡金属),然后, 我们训练另一个分类器来预测,例如,乐队的国籍(瑞典语),然后 我们可以通过训练分类器来预测该子组内的现有波段(Arch Enemy,At the Gates,...)
查看有关分层分类的这篇文章以获取更多详细信息。
https://www.kdnuggets.com/2018/03/hierarchical-classification.html
答案 2 :(得分:0)
我不确定我完全理解你的问题,但从我的理解,听起来Decision tree,或者像Random Forest这样的最先进的算法将是一个不错的选择。 您将需要构建树,可能使用一些NLP技术来删除不必要的单词,如“is”,“I”,“the”(可能,但需要检查更深)并将这些单词用作树的特征。 / p>
至于第二个问题,你应该读一些关于机器学习的内容。 Andrew Ng course on Coursera是一个很好的选择。但是对于您的问题,培训是您选择训练的数据的一部分,测试数据是您评估算法性能的方法。这也应该回答你的第三个问题