是否应该将“欺骗性”训练案例提供给朴素贝叶斯分类器

Posted

技术标签:

【中文标题】是否应该将“欺骗性”训练案例提供给朴素贝叶斯分类器【英文标题】:Should 'deceptive' training cases be given to a Naive Bayes Classifier 【发布时间】:2016-12-23 04:30:11 【问题描述】:

我正在设置一个朴素贝叶斯分类器来尝试确定五个字符串属性的两条记录之间的相同性。我只是在准确地比较每对属性(即,使用 java .equals() 方法)。我有一些训练数据,包括 TRUE 和 FALSE 案例,但我们现在只关注 TRUE 案例。

假设有一些 TRUE 训练案例,其中所有五个属性都不同。这意味着每个比较器都失败了,但经过一些人工评估后,这些记录实际上被确定为“相同”。

是否应该将此训练案例输入朴素贝叶斯分类器?一方面,考虑到 NBC 分别对待每个变量的事实,这些案例不应该完全破坏它。然而,提供足够多的这些情况似乎对分类器的性能没有好处。我知道看到很多这样的案例意味着需要更好的比较器,但我想知道目前该做什么。另一个考虑是反面是不可能的。也就是说,不可能在两条记录之间的所有五个属性都相同,但它们仍然是“不同”的记录。

这是一个优先问题,还是有一个明确的公认做法来处理这个问题?

【问题讨论】:

在我看来,学习算法应该只应用于能够做出正确区分的情况。如果存在算法无法检测到的真实情况,那么如您所说,应该对其进行改进。如果问题是由人工输入引起的,您可以尝试通过删除所有特殊字符并将所有字母更改为大写或小写来对其进行标准化。您还可以使用更细微的比较,并尝试找出常见的拼写错误或拼写错误。 【参考方案1】:

通常,您需要一个训练数据集,该数据集尽可能地代表您希望对观察结果进行分类的领域(尽管通常很困难)。不具代表性的集合可能会导致分类器功能不佳,特别是在接收各种数据的生产环境中。话虽如此,预处理可用于限制在特定数据子集上训练的分类器的曝光,因此它完全取决于分类器的目的。

我不确定您为什么要排除某些元素。参数估计/学习应该考虑到两个不同的输入可能映射到相同的输出这一事实——这就是为什么你会使用机器学习而不是简单地使用哈希图。考虑到您通常没有“所有数据”来构建模型,您必须依赖这种类型的推理。

你看过NLTK;它在 python 中,但似乎OpenNLP 可能是 Java 中的合适替代品?您可以采用更好的特征提取技术,从而生成一个模型来解释输入字符串中的微小变化(请参阅here)。

最后,在我看来,您想学习从输入字符串到类 'same' 和 'not same' 的映射 --- 你似乎想推断距离测量(只是检查)。投入精力直接找到更好的度量会更有意义(例如,对于字符转置问题,您可以使用edit distances)。我不确定 NB 是否非常适合您的问题,因为它正在尝试确定给定观察值(或其特征)的类。这个类必须能够区分各种不同的字符串(我假设您要连接 string1 和 string2,并将它们提供给分类器)。是否存在足够的结构来获得如此广泛适用的属性?这个分类器基本上需要能够处理所有成对的“比较”,除非您为每个一对多配对构建 NB。这似乎不是一个简单的方法。

【讨论】:

以上是关于是否应该将“欺骗性”训练案例提供给朴素贝叶斯分类器的主要内容,如果未能解决你的问题,请参考以下文章

如何训练以 pos-tag 序列为特征的朴素贝叶斯分类器?

朴素贝叶斯和多类分类器返回整数。数据团队说他们应该是概率

“移花接木”(朴素贝叶斯分类器)

HanLP 基于朴素贝叶斯 训练 文本分类

HanLP 基于朴素贝叶斯 训练 文本分类

训练朴素贝叶斯分类器