在您的示例中,我认为验证和测试之间没有有意义的区别。
学习是在您训练模型时,这意味着您的输出通常是参数,例如回归模型中的系数或神经网络中连接的权重。在您的情况下,输出是给定推文正 P(w|+)、看到给定负 P(w|-) 和给定中性 P 的推文中看到单词 w 的概率的估计概率(w|*)。此外,在给定正面、负面、中性、P(~w|+) 等的情况下,在推文中看不到单词的概率。输入是训练数据,该过程只是通过测量单词出现的频率来估计概率(或不要发生)在您的每个课程中,即只是计数!
在测试中,您可以看到经过训练的模型在您以前从未见过的数据上的表现如何。训练倾向于产生过度拟合训练数据的输出,即系数或概率被“调整”到训练数据中的噪声,所以你需要看看你的模型在它没有训练过的数据上的表现如何。在您的情况下,输入是测试示例,过程应用贝叶斯定理,输出是测试示例的分类(您根据概率最高进行分类)。
我遇到了交叉验证——除了测试——在你不知道要使用什么模型的情况下(或者有额外的“外部”参数来估计在训练中无法完成的情况阶段)。您将数据分成 3 组。
因此,例如,在线性回归中,您可能想要拟合直线模型,即估计p
和c
in y = px + c
,或者您可能想要拟合二次模型,即估计p
、c
和q
in y = px + qx^2 + c
。您在这里所做的是将您的数据分成三份。您使用数据的第 1 部分(训练示例)训练直线和二次模型。然后,您可以通过使用数据的第 2 部分(交叉验证示例)来查看哪个模型更好。最后,一旦您选择了模型,您就可以使用数据的第 3 部分(测试集)来确定您的模型有多好。回归是一个很好的例子,因为二次模型总是比直线模型更适合训练数据,所以不能只看训练数据上的错误来决定做什么。
在朴素贝叶斯的情况下,使用交叉验证集探索不同的先验概率可能是有意义的,即 P(+)、P(-)、P(*),然后使用测试集来查看效果如何您已经完成了使用交叉验证选择的先验和使用训练数据估计的条件概率。
作为如何计算条件概率的示例,考虑 4 条推文,这些推文已被人类分类为“+”或“-”
- T1,-,包含“仇恨”、“愤怒”
- T2, +, 包含“不要”、“讨厌”
- T3,+,包含“爱”、“朋友”
- T4,-,包含“愤怒”
因此,对于 P(hate|-),您将仇恨出现在负面推文中的次数加起来。它出现在 T1 而不是 T4,所以 P(hate|-) = 1/2。对于 P(~hate|-),你做相反的事情,仇恨不会出现在 2 条负面推文中的 1 条中,所以 P(~hate|-) = 1/2。
类似的计算得出 P(anger|-) = 1,P(love|+) = 1/2。
美中不足的是,任何为 0 的概率都会在计算阶段搞砸,所以你不使用零概率,而是使用非常低的数字,比如 1/n 或 1/n^2,其中 n 是训练示例的数量。所以你可以把 P(~anger|-) = 1/4 或 1/16。
(我在这个答案中的计算数学)。