【问题标题】:Hierarchical classification top down approach to machine learning机器学习的分层分类自顶向下方法
【发布时间】:2016-08-16 03:22:35
【问题描述】:

我有一个句子数据集,这些句子已经用层次结构中的标签进行了注释。层次结构是音乐流派的选择。它是一棵树,而不是 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) 如何评估分类性能?特别是采用自上而下的方法,因为我们将对每个单独的级别进行评估。

【问题讨论】:

  • 预测level3还不够吗?因为,如果你知道某个东西是“classical”,那么它就隐含地持有 level2= non-latin 和 level1 = music

标签: machine-learning classification weka decision-tree hierarchical


【解决方案1】:

分层组织类,创建类别的树或 DAG(有向无环图),利用有关它们之间关系的信息。

我们采用所谓的自上而下的方法,在树的每个级别(或节点)训练一个分类器(同样,虽然这不是唯一的分层方法,但它绝对是使用最广泛的方法,也是我们的方法。已经选择了我们手头的问题),给定的决定将引导我们走上不同的分类路径。

音乐示例来自以下链接的博客: 我们首先训练一个分类器来预测,比如说,音乐的流派(死亡金属),然后, 我们训练另一个分类器来预测,例如,乐队的国籍(瑞典),然后 我们可以训练一个分类器来预测该子组中的现有频段(Arch Enemy、At the Gates,......)

查看这篇关于层次分类的帖子以获取更多详细信息。

https://www.kdnuggets.com/2018/03/hierarchical-classification.html

【讨论】:

    【解决方案2】:

    survey article 很好地解释了分层分类的各种策略。

    您可以通过控制用于训练每个子分类器的训练数据来防止出现不一致的预测,例如您给出的 latin->classical 示例。例如,您首先训练一个二元分类器来区分拉丁语和非拉丁语,使用所有数据进行训练。然后,您只使用这两个类别中的示例作为训练数据来训练分类器以区分非洲裔古巴人和巴西人。在推理时,如果 latin/non-latin 分类器预测为 'latin',您只需将未标记的示例传递给 afro-cuban/barzilian 分类器。

    【讨论】:

      【解决方案3】:

      我不确定我是否完全理解您的问题,但根据我的理解,听起来Decision tree 或像Random Forest 这样的最先进算法将是一个不错的选择。 您将需要构建树,也许使用一些 NLP 技术来删除不必要的词,如“is”、“I”、“the”(可能,但需要更深入地检查)并将这些词用作树的特征。

      至于第二个问题,您可能应该阅读一些有关机器学习的内容。 Andrew Ng course on Coursera 是一个不错的选择。但是对于您的问题,训练是您选择训练的数据的一部分,而测试数据是您评估算法性能的数据。这也应该回答你的第三个问题

      【讨论】:

      • 感谢您的回答。我知道训练和测试数据的目的,以及它们的作用,以及一般的机器学习。我只是不明白你会如何以分层的方式去做。所以你建议从我的句子中提取特征?这只会在更小的空间中产生句子。这如何解决我的分层问题?问题是,一个类属于多个级别。正如我所解释的,一个节点也可以被归类为它的父节点,因为从概念上讲,这也是正确的。如何做到这一点?
      • 从句子中提取特征 - 是的,首先这会删除很多不必要的数据,其次是句子中的示例,它只会保留有意义的单词。层次问题会在树中解决,也很直观。例如,在句子中:“我更喜欢萨尔萨舞”,萨尔萨舞将是一个强特征,当它进入你的分类器时,它可能向非洲古巴人或拉丁人或音乐,取决于你的标签是什么 你对树的哪个部分感兴趣?顶层?第二个?
      • 我对树木没有任何先验知识,所以如果你知道或可以帮助我了解你将如何做这个 weka,那就太好了。我对整棵树感兴趣,我想这取决于句子的类标签?
      • 我找到了this intro 一次,它包含了树上的一部分,非常形象化。我很喜欢。希望对你有帮助
      • 我不确定决策树是否是我正在寻找的。我读过的以前的论文是在每个节点上分类为二进制分类,或在每个层次级别上分类。除非您知道,否则没有关于如何完成或在线教程的说明?那太好了。
      猜你喜欢
      • 2012-03-14
      • 2020-05-04
      • 2018-12-07
      • 2023-04-04
      • 2021-04-14
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多