机器学习学习笔记之三:朴素贝叶斯
来源:互联网 发布: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})}\]
因此,我们要计算的就是等式右边的三个概率。
- 文本人工标注,确定 \(p(是垃圾邮件)\) 和 \(p(不是垃圾邮件)\)。
对文本进行划分,求 \(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出现的总次数}\]计算\(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*}\]
- 机器学习笔记(三)之朴素贝叶斯
- 机器学习学习笔记之三:朴素贝叶斯
- 机器学习学习笔记之三:朴素贝叶斯
- 机器学习----笔记之朴素贝叶斯(4)
- 《机器学习实战》学习笔记(三)之朴素贝叶斯(上)基础理论及基于朴素贝叶斯算法文档分类
- 机器学习笔记:朴素贝叶斯
- 机器学习之朴素贝叶斯
- 机器学习之朴素贝叶斯
- 机器学习之朴素贝叶斯
- 【机器学习实战】笔记三:朴素贝叶斯算法
- 机器学习笔记(三) 朴素贝叶斯分类
- 朴素贝叶斯算法---机器学习算法之三
- 机器学习_统计模型之(三)朴素贝叶斯
- 【斯坦福---机器学习】复习笔记之朴素贝叶斯算法
- 机器学习实战笔记之四(朴素贝叶斯)
- Python机器学习与实战笔记之朴素贝叶斯分类
- 王小草【机器学习】笔记--分类算法之朴素贝叶斯
- 机器学习笔记之朴素贝叶斯分类算法
- X264码率控制总结
- Python里的那些坑
- android开发 之 android和js通过WebView调用
- 字典树题目整合
- 策略模式
- 机器学习学习笔记之三:朴素贝叶斯
- Unity与HTC开发结合
- gitlab https访问不了
- 每天一个linux命令(11):nl命令
- 错误解决error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file
- 人脸检测--S3FD: Single Shot Scale-invariant Face Detector
- CodeForces 665C Simple Strings
- tensorflow:常用API-'a'
- Singleton模式