优点:在数据较少的情况下仍然有效,可以处理多类别问题
缺点:对输入数据的准备方式比较敏感
适用数据类型:标称型数据
假定特征之间独立,即计算条件概率时各个条件独立
则有\(p(x_0, x_1, x_2, ...|c_i)=p(x_0|c_i) \cdot p(x_1|c_i) \cdot p(x_2|c_i) \cdot ...\)
假设存在一个文档,且其中每一句话都带有标签“侮辱性语句”或“非侮辱性语句”;
那么,我们可以通过“侮辱性语句”出现的频率来计算判定其为侮辱性文档的概率,即——
$$p(侮辱性文档)=\frac{侮辱性语句的数量}{总的语句数量}$$
分别统计所有单词在“侮辱性语句”和“非侮辱性语句”中出现的频次;
并分别除以“侮辱性语句”和“非侮辱性语句”的总单词数,以此计算出“侮辱性语句”和“非侮辱性语句”中各个单词的条件概率\(p(x_i|c_j)\)
但存在两个问题——
如果出现部分单词没有出现,即存在条件概率\(p(x_i|c_j)=0\)
那么根据朴素贝叶斯公式,则有\(p(x_0, x_1, x_2, ...|c_i)=p(x_0|c_i) \cdot p(x_1|c_i) \cdot p(x_2|c_i) \cdot ...=0\)
改进方法如下:
此时不再会出现零条件概率
多数单词的条件概率可能会非常小,甚至接近于0
而计算机的运算存在误差
当这些条件概率相乘时,有可能会得出0或者得出一个非常接近0的结果,而丢失很信息
改进方法如下:
已知一个语句,根据比较\(p(c_0|x_0, x_1, x_2, ...)\)和\(p(c_1|x_0, x_1, x_2, ...)\)判断其为“侮辱性语句”或“非侮辱性语句”(分别记为\(p_0\)和\(p_1\));
根据朴素贝叶斯
$$p(c_i|x_0, x_1, x_2, ...)=\frac{p(x_0, x_1, x_2, ...|c_i) \cdot p(c_i)}{p(x_0, x_1, x_2, ...)}=\frac{p(x_0|c_i) \cdot p(x_1|c_i) \cdot p(x_2|c_i) \cdot ... \cdot p(c_i)}{p(x_0, x_1, x_2, ...)}$$
由于分母相等,所以仅需比较两者的分子(记为\(num_0\)和\(num_1\))即可得到\(p_0\)和\(p_1\)的比较结果
训练时已经分别得到\(log(p(x_0|c_i)), log(p(x_1|c_i)), log(p(x_2|c_i)), ...\)以及\(p(c_i)\),
所以不妨比较\(log(num_0)\)和\(log(num_1)\),而
$$log(num_i)=log(p(x_0|c_i) \cdot p(x_1|c_i) \cdot p(x_2|c_i) \cdot ... \cdot p(c_i))=log(p(x_0|c_i))+log(p(x_1|c_i))+log(p(x_2|c_i))+...+log(p(c_i))$$