我有一个寻找大写字母的朴素贝叶斯分类器(用WEKA实现)。
contains_A
contains_B
...
contains_Z
对于某一类,几乎每个训练数据的实例都会出现LCD一词。当我得到“LCD”属于该类的概率时,它就像0.988。取胜。
当我得到“L”的概率时,我得到一个普通的0而对于“LC”,我得到0.002。由于特征是天真的,L,C和D不应该独立地贡献整体概率,因此“L”有一定概率,“LC”更多,“LCD”甚至更多?
同时,使用MLP的相同实验,而不是具有上述行为,它给出0.006,0.5和0.8的百分比
所以MLP做了我期望Naive Bayes做的事情,反之亦然。我错过了什么,有人可以解释这些结果吗?
答案 0 :(得分:0)
我不熟悉WEKA的内部 - 所以如果你认为我不对,请纠正我。
将文字用作"功能"比这个文本转换为二进制值的向量。每个值对应一个具体的单词。向量的长度等于字典的大小。
如果你的词典包含4个世界:LCD,VHS,HELLO,WORLD 然后例如文本HELLO LCD将转换为[1,0,1,0]。
我不知道WEKA如何构建它的字典,但我认为它可能会覆盖示例中的所有单词。除非" L"字典中存在(并且因此存在于示例中)而不是它的概率是逻辑上的0.实际上它甚至不应被视为特征。
实际上你无法推断这些功能的概率 - 而且你不能将它们加在一起,我认为这些功能之间没有这种关系。
答案 1 :(得分:0)
请注意,在文本挖掘中,如果您使用任何类型的术语加权和规范化,则可以为单词(您的案例中的字母)赋予与实际计数不同的权重,例如: TF.IDF。例如,在tf.idf的情况下,字符计数被转换为对数标度,并且每个单个实例中出现的字符也可能使用idf标准化来惩罚。
我不确定您使用哪些选项将数据转换为Weka功能,但您可以在此处看到Weka具有为此类加权和规范化选项设置的参数
http://weka.sourceforge.net/doc.dev/weka/filters/unsupervised/attribute/StringToWordVector.html
-T 将单词频率转换为log(1 + fij) 其中fij是第j个文档(实例)中单词i的频率。
-I 将每个单词频率转换为: fij * log(包含单词i的文件/文件数) 其中fij是第j个文件中的单词i的频率(实例)
答案 2 :(得分:0)
我检查了weka
文档,但我没有看到支持将字母提取为功能。这意味着weka
函数可能需要空格或标点符号来界定每个要素与相邻要素。如果是这样,那么搜索“L”,“C”和“D”将被解释为三个单独的单字母单词并且将解释为什么找不到它们。
如果您认为是这样,您可以尝试在摄取之前将文本拆分为由\n
或空格分隔的单个字符。