我正在设置一个朴素贝叶斯分类器,以尝试确定五个字符串属性的两个记录之间的相似性。我只是精确地比较每一对属性(即,使用java .equals()方法)。我有一些训练数据,包括真实和错误的案例,但我们现在只关注真实的案例。
假设有一些真实的训练案例,其中所有五个属性都是不同的。这意味着每个比较器都会失败,但经过一些人类评估后,这些记录实际上是“相同的”。
是否应该将此训练案例提供给朴素贝叶斯分类器?一方面,考虑到NBC分别对待每个变量的事实,这些情况不应该完全破坏它。然而,输入足够多的这种情况对分类器的性能没有好处,这似乎是真的。我明白,看到很多这样的案例意味着需要更好的比较器,但我想知道目前该怎么做。另一个考虑因素是,另一种情况是不可能的;也就是说,两个记录之间的所有五个属性不可能是相同的,而它们仍然是“不同”的记录。
这是一个优惠的问题,还是有一个明确的可接受的做法来处理这个问题?
发布于 2016-08-17 17:18:46
通常,您会希望拥有一个训练数据集,该数据集尽可能代表您希望从中对观察结果进行分类的领域(尽管通常很难)。不具有代表性的集合可能导致功能不佳的分类器,特别是在接收各种数据的生产环境中。也就是说,预处理可以用于限制在特定数据子集上训练的分类器的暴露,因此它在很大程度上取决于分类器的目的。
我不知道你为什么要排除一些元素。参数估计/学习应该考虑到这样一个事实,即两个不同的输入可能映射到相同的输出-这就是为什么您将使用机器学习而不是简单地使用hashmap。考虑到你通常没有“所有的数据”来构建你的模型,你必须依赖于这种类型的推理。
您有没有看过NLTK;它是用python编写的,但看起来OpenNLP可能是Java语言的合适替代品?您可以使用更好的特征提取技术,从而得到一个模型,该模型可以解释输入字符串中的微小变化(请参阅here)。
最后,在我看来,你似乎想要学习从输入字符串到类“相同”和“不同”的映射-你似乎想推断一个距离度量(只是检查)。投入精力直接找到更好的度量方法会更有意义(例如,对于字符转置问题,您可以使用edit distances)。我不确定NB是否适合您的问题,因为它正在尝试确定一个给定的观察值(或其特征)的类。这个类必须在各种不同的字符串上是可识别的(我假设您将连接string1和string2,并将它们提供给分类器)。是否会有足够的结构来派生出这样一个广泛适用的属性?这个分类器基本上需要能够处理所有成对的“比较”,除非你为每一个一对多的配对构建NBs。这似乎不是一种简单的方法。
https://stackoverflow.com/questions/38980981
复制相似问题