每个父节点的多类预测器的分层分类

数据挖掘 Python 分类 文本挖掘 多类分类
2022-03-04 01:05:15

编辑:事实证明,我在计算组合概率的函数中有一个错误(一个错字在很大程度上改变了我的函数的行为而没有给我一条错误消息)。没有它,我的分类会更令人满意。另外,我不再使用 softmax 了,因为无论如何我的概率都是标准化的。所以问题基本解决了。如果有人知道如何改进我的分层分类算法,我很高兴听到它!

我有一个包含 tf-idf/bm25 加权词的数据集(我正在尝试两种方法),其中包含我尝试预测的几个类。这些类具有具有 2 个级别的层次结构。图中显示了层次结构的一部分。第一层总共有 20 个类和 111 个叶子节点。一些父节点没有任何子节点。 2级层次结构

我想为每个父节点安装一个多类分类器(因此仅考虑上面显示的层次结构的一部分,即 3 个分类器,一个用于第一级,两个用于有子节点的父节点),即根据Silla & Freitas, 2011称为“每个父节点的本地分类器方法” 。我的理解是,第一级的分类器使用整个训练集进行训练,而第二级的分类器仅使用带有属于这些类的标签的示例进行训练(因此 Catering 子级的分类器使用仅训练标记为 Catering 的示例)。

我计划使用来自 scikit-learn 的多项朴素贝叶斯和支持向量机作为我的分类算法。训练后,我获得了测试集的对数概率。

我不确定的是我应该如何将我获得的概率与我的分类器结合起来。我认为我可以将第一级的概率与第二级的概率相乘(或添加对数概率)以获得叶节点概率。

我的推理是,如果在第一层犯了错误,那么真正的第一层类的概率相对较低,那么它仍然可以通过子节点中的高概率来补偿。

在获得所有概率后,我将对叶节点概率进行归一化,以便它们与 softmax 相加为 1。但是,这样做时,我得到每个叶节点的概率非常相似,因此最高叶节点概率仅比其他叶节点的概率高一点。

这在某种程度上是有道理的,因为我强制每个二级分类器只给我该分类器的子级的概率,并且这些子级加起来为 1。所以即使我的测试示例不属于有问题的父节点,其中一个儿童班将获得相对较高的概率。

如何避免叶节点概率区分不够的问题?或者我的推理中是否还有其他错误导致了这个结果?

0个回答
没有发现任何回复~