机器学习学习笔记之三:朴素贝叶斯

来源:互联网 发布:json转map 编辑:程序博客网 时间:2024/05/16 15:54

条件概率和贝叶斯公式

条件概率

\(p(x|y)\) 表示在 \(y\) 发生的条件下\(x\) 发生的概率。

条件概率公式:
已知 \(p(x)\)\(p(y)\),以及\(x\),\(y\)同时发生的概率\(p(xy)\),那么
\[p(x|y) = \frac{p(xy)}{p(y)}\]
\[p(y|x) = \frac{p(xy)}{p(x)}\]

贝叶斯公式

由以上两个公式我们还可以得到
\[p(x|y) = \frac{p(y|x)p(x)}{p(y)}\]
这就是贝叶斯公式。其中,
\(p(x)\) 称为 \(x\)先验概率
\(p(y)\) 称为 \(y\)先验概率
\(p(y|x)\) 称为 \(y\)\(x\) 发生后的后验概率
\(p(x|y)\) 称为 \(x\)\(y\) 发生后的后验概率

我们把其中的\(x, y\)替换成“特征”,“类别”,于是就有更容易理解的公式:
\[p(类别|特征) = \frac{p(特征|类别)p(类别)}{p(特征)}\]

使用朴素贝叶斯算法对数据进行分类

基本原则:

假设我们有两种类别\(c_1, c_2\),如何对特征\(\vec{w}\)进行分类?只要计算\(p(c_1|\vec{w})\)\(p(c_2|\vec{w})\),然后判断哪个概率更大。
\(\text{if}\ p(c_1|\vec{w}) > p(c_1|\vec{w})\ \text{then} \ \vec{w} \in c_1\)
\(\text{if}\ p(c_1|\vec{w}) < p(c_1|\vec{w})\ \text{then} \ \vec{w} \in c_2\)

例1:简单的数据分类

已知某女择偶标准可分为[帅,富,高,上进]四个特征。其中根据四个特征分别取值1和0,根据该女过去的相亲记录,有如下分布:

帅富高上进嫁00000000100010000111010110110101111100001001011101

现在有一男,特征分别是[帅,不富,高,不上进],请问是否符合该女的择偶标准?

:根据贝叶斯公式,我们要求的量是 \(p(嫁|[帅,不富,高,不上进])\)\(p(不嫁 | [帅,不富,高,不上进])\)
我们先计算比较容易计算的量:\(p([帅,不富,高,不上进])\),由于朴素贝叶斯的条件,我们认为这四个特征是彼此独立的。因此
\[\begin{align*} p([帅,不富,高,不上进]) & = p(帅)p(不富)p(高)p(不上进) \\ & = 0.3 \times 0.6 \times 0.5 \times 0.5 \\ & = 0.045 \end{align*}\]

另外我们还可以求得
\[p(嫁) = 0.5, p(不嫁) = 0.5\]

由于各特征彼此独立,所以
\[\begin{align*}p([帅,不富,高,不上进] | 嫁) &= p(帅|嫁)p(不富|嫁)p(高|嫁)p(不上进|嫁) \\ & = \frac{p(帅,嫁)}{p(嫁)} \times \frac{p(不富,嫁)}{p(嫁)} \times \frac{p(高,嫁)}{p(嫁)} \times \frac{p(不上进,嫁)}{p(嫁)} \\ & = \frac{0.1}{0.5} \times \frac{0.1}{0.5} \times \frac{0.4}{0.5} \times \frac{0.2}{0.5} \\ & = 0.0128 \end{align*}\]

\[\begin{align*}p([帅,不富,高,不上进] | 不嫁) &= p(帅|不嫁)p(不富|不嫁)p(高|不嫁)p(不上进|不嫁) \\ & = \frac{p(帅,不嫁)}{p(不嫁)} \times \frac{p(不富,不嫁)}{p(不嫁)} \times \frac{p(高,不嫁)}{p(不嫁)} \times \frac{p(不上进,不嫁)}{p(不嫁)} \\ & = \frac{0.2}{0.5} \times \frac{0.5}{0.5} \times \frac{0.1}{0.5} \times \frac{0.3}{0.5} \\ & = 0.048 \end{align*}\]

所以
\[\begin{align*} p(嫁|[帅,不富,高,不上进]) &= \frac{p([帅,不富,高,不上进] | 嫁)p(嫁)}{p([帅,不富,高,不上进])} \\ &=\frac{0.0128 \times 0.5}{0.045} \\ &=0.142 \end{align*}\]

\[\begin{align*} p(不嫁 | [帅,不富,高,不上进]) &= \frac{p([帅,不富,高,不上进] | 不嫁)p(不嫁)}{p([帅,不富,高,不上进])} \\ &= \frac{0.048 \times 0.5}{0.045} \\ &= 0.533 \end{align*}\]

显然 \(p(不嫁 | [帅,不富,高,不上进]) > p(嫁|[帅,不富,高,不上进])\),所以该男不符合该女的择偶标准。

但是,这个例子仅仅是通过现有的数据和贝叶斯公式直接得出结论,缺少训练的步骤。下面这个例子会通过对垃圾邮件进行分类来详细说明训练和测试的步骤。

例二:垃圾邮件分类

本质上,垃圾邮件分类可以用贝叶斯公式表示如下:
\[p(是垃圾邮件|词向量\vec{w_i}) = \frac{p(\vec{w_i}|是垃圾邮件)p(是垃圾邮件)}{p(\vec{w_i})}\]

因此,我们要计算的就是等式右边的三个概率。

  1. 文本人工标注,确定 \(p(是垃圾邮件)\)\(p(不是垃圾邮件)\)
  2. 对文本进行划分,求 \(p(\vec{w_i})\)
    \(p(\vec{w_i})\) 的本质是,在\(\vec{w_i}\)中出现的所有词占全部词的比例。
    假定所有单词出现的概率是彼此独立的,那么
    \[p(\vec{w_i}) = p(w_0)p(w_1)p(w_2)...p(w_n), \ w0,w1,...w_n \in \vec{w_i}\]
    因此
    \[p(\vec{w_i}) = \prod_{k=1}^N \frac{在文本t_i中w_k出现的次数}{w_k出现的总次数}\]

  3. 计算\(p(\vec{w_i} | 是垃圾邮件)\)
    同样地,由于各单词出现的概率彼此独立,因此
    \[\begin{align*} p(\vec{w_i} | 是垃圾邮件) & = \prod_{i=1}^N \frac{p(\vec{w_i}, 是垃圾邮件)}{p(是垃圾邮件)} \end{align*}\]
    使用对数可以消除乘除法带来的误差,所以上述公式又可表示成
    \[\begin{align*} \ln p(是垃圾邮件|\vec{w_i}) & = \ln p(\vec{w_i} | 是垃圾邮件) + \ln p(是垃圾邮件) - \ln p(\vec{w_i})\\ \end{align*}\]