首页 > 技术文章 > 朴素贝叶斯

red-code 2018-08-21 20:04 原文

分类算法

已知集合x,我们把这个集合称为特征集合,其中每一个元素是一个待分类项。

已知集合y,我们把这个集合称为类别集合,其中的每一个元素是一个类别。

我们现在要找到一个函数f,使得y=f(x),即x集合中的每一个待分类项,都能通过f函数找到对应的分类y。

分类算法的任务就是找到这个f函数。

 

朴素贝叶斯算法

朴素贝叶斯是根据贝叶斯公式得出的。

贝叶斯公式:

P(Ai|B) = P(B|Ai)P(Ai) /P(B)

 

根据分类算法可知:

 

我们的目的就是找到一个f函数(此时这个f函数就是朴素贝叶斯),使得任意x特征有对应的y类别。

即通过朴素贝叶斯找到“P(类别|特征)”,解释一下就是找到“当某某特征发生的情况下,某某类别也发生的概率”。

所以套用贝叶斯公式可得:

P(类别|特征) = P(特征|类别)P(类别) /P(特征)

 

朴素贝叶斯算法有一个大前提就是:所有特征条件都是相互独立的。

下面我们就来解释一下这个前提的意义。

 

假设现在小明要出去玩:

有特征集合x是表示当天的一些情况,有{天气,作业,心情}

有结果类别集合y代表最后到底去不去,有{去,不去}

 

那么天气可以细分为:好、中、差

作业可以细分为:多、少

心情可以细分为:好、坏

 

如果天气、作业、心情是相互“不独立”的,

那么特征就有3*2*2=12种组合情况。

就需要一一统计这12种情况的概率

即{天气好、作业多、心情好}、{天气好、作业多、心情坏}、{天气好、作业少、心情好}······一共12种。

在实际问题中特征往往要比这还多,很多组合特征可能根本没法得到。

 

如果假定天气、作业、心情相互独立。

那么就有P{天气,作业,心情} = P{天气}P{作业}P{心情}

由此,我们只需要找到各自的子特征即可,即{天气好},{天气中}、{天气差}······一共7种。

特征概率的获取难度大大降低。

 

如果只是普通贝叶斯,那么公式为:

P(去玩 | 天气中,作业多,心情好) = P(天气中,作业多,心情好 | 去玩)P(去玩) / P(天气中,作业多,心情好)

由上面这个公式可以看出来:

我们为了求“在天气中,作业多,心情好”这样的前提下,小明出去玩的概率。

需要知道P(天气中,作业多,心情好),即:同一天天气中,作业多,心情好的概率。

以及P(天气中,作业多,心情好 | 去玩)P(去玩),即:小明出去玩时,天气中,作业多,心情好的概率。

自然,要提前找到这些特征概率是十分困难的。

 

但如果用朴素贝叶斯算法解这个问题,那么作业、天气、心情就假定成相互独立的了。

公式变为:

P(去玩 | 天气中,作业多,心情好) = P(天气中|去玩)P(作业多|去玩)P(心情好|去玩)P(去玩) / P(天气中)P(作业多)P(心情好)

由公式我们可以看出我们找到前置概率的难度下降了很多。

变成了找到单一特征条件概率,如 P(天气中)、P(天气中|去玩)

 

所以朴素贝叶斯相比贝叶斯的最大区别就是,加上了个条件的独立性假设,大大减少了参数的假设数量。

推荐阅读