我正在设置朴素贝叶斯分类器,以尝试确定五个字符串属性的两个记录之间的相同性。我只是精确地比较每对属性(即使用java .equals()方法)。我有一些训练数据,包括TRUE和FALSE案例,但我们暂时只关注TRUE案例。
让我们说有一些真实的培训案例,其中所有五个属性都不同。这意味着每个比较器都会失败,但记录实际上确定为相同的'经过一些人工评估。
这个训练案例是否应该用于朴素贝叶斯分类器?一方面,考虑到NBC分别处理每个变量的事实,这些案例不应该完全打破它。然而,喂养足够的这些病例似乎对分类器的性能没有好处。我知道看到很多这些案例意味着需要更好的比较器,但我想知道目前该做些什么。另一个考虑因素是翻转方面是不可能的;也就是说,两个记录之间的所有五个属性都不可能是相同的,并且它们仍然是不同的'记录。
这是一个优先问题,还是有一个明确的公认处理方法?
答案 0 :(得分:0)
通常,您希望拥有一个尽可能具有代表性的训练数据集,您希望对其进行分类(通常很难)。不具代表性的集合可能导致分类器功能不良,特别是在接收各种数据的生产环境中。话虽如此,预处理可用于限制在特定数据子集上训练的分类器的暴露,因此它完全取决于分类器的目的。
我不确定你为什么要排除某些元素。参数估计/学习应该考虑到两个不同的输入可以映射到相同输出的事实 - 这就是为什么你要使用机器学习而不是简单地使用hashmap。考虑到您通常没有“所有数据”来构建模型,您必须依赖这种类型的推理。
您是否看过NLTK;它是在python中,但似乎OpenNLP可能是Java中的合适替代品?您可以采用更好的特征提取技术,从而产生一个模型,该模型可以解释输入字符串中的微小变化(请参阅here)。
最后,在我看来,你想要学习从输入字符串到类'相同'和'不相同'的映射 - 你似乎想要推断一个距离测量(只是检查)。投入精力直接寻找更好的衡量标准(例如,您可以使用edit distances)的字符转置问题更有意义。我不确定NB是否适合您的问题,因为它试图确定给定观察(或其特征)的类。这个类必须能够通过各种不同的字符串辨别出来(我假设你要连接string1和string2,并将它们提供给分类器)。是否有足够的结构来获得这样一个广泛适用的财产?除非你为每一对多配对构建NB,否则这个分类器基本上需要能够处理所有成对的'比较'。这似乎不是一个简单的方法。