朴素贝叶斯分类实战

语言:python3
环境:windows、pycharm

问题

在已知一组语句是否为脏话的情况下,判定新说出的一句话是否为脏话。

这是一组输入的数据,并且已知脏话为2、4、6句。

[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],
 ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],
 ['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him', 'my'],
 ['stop', 'posting', 'stupid', 'worthless', 'garbage'],
 ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],
 ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]

所以现在对应的结果为:(脏话为1,不是脏话为0)

[0, 1, 0, 1, 0, 1]

那么现在我输入一句话,希望得到这句话结果是0还是1?

分析

首先对事件进行定义。
定义句子中的第i单词为Vi,定义第j种结果为Rj。在本例中有两种结果,分别为R0R1。现在假设某个句子有若干个单词,单词分别为V1、V2、V3

现在假设求解分类为R0(结果为0)的概率,根据朴素贝叶斯定理,即有下面的公式:

这样可以求出分类为0的概率,在再按照上面的式子求解分类为1的概率,比较两者大小,取概率较大的,判定为该类。

需要注意的是这其中P(Vi)的概率和P(Ri)的概率都很好求,但是P(Vi|Ri)的概率不是按照条件公式来求解,而是直接通过样本数据统计出来,这是这个公式中最核心的一点。

如何求解P(Vi|Ri)

下面有两句话:
you are a student. 这句话结果为0
you use the computer. 这句话结果为1

那么求解当结果为0时,单词you出现的概率(这就是上面标题的公式表达的概率)。
一共出现了8个单词(包含重复的),结果为0里面you出现了一次,所以概率为1/8

具体代码

具体分类代码已经上传到github上。
朴素贝叶斯分类实例代码

END

参考

朴素贝叶斯分类原理及Python实现简单文本分类

你可能感兴趣的:(朴素贝叶斯分类实战)