标签:学习 color img 次数 proc rac 机器 出现 title
目录
更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/
朴素贝叶斯是基于贝叶斯公式与特征条件独立假设的分类方法(注:贝叶斯公式是数学定义,朴素贝叶斯是机器学习算法)。朴素贝叶斯基于输入和输入的联合概率分布,对于给定的输入,利用贝叶斯公式求出后验概率最大的输出\(y\)。即可以总结为以下三点
假设现在有一个有两个类别的鸢尾花数据集,并且已经知晓每个数据的分类情况,并且假设数据的分布如下图所示。
# 朴素贝叶斯引入图例
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
from sklearn import datasets
%matplotlib inline
font = FontProperties(fname='/Library/Fonts/Heiti.ttc')
iris_data = datasets.load_iris()
X = iris_data.data[0:100, [0, 1]]
y = iris_data.target[0:100]
plt.scatter(X[0:50, [0]], X[0:50, [1]], color='r',
s=50, marker='o', label='山鸢尾')
plt.scatter(X[50:100, [0]], X[50:100, [1]],
color='b', s=50, marker='x', label='杂色鸢尾')
plt.xlabel('花瓣长度(cm)', fontproperties=font)
plt.ylabel('花瓣宽度(cm)', fontproperties=font)
plt.legend(prop=font)
plt.show()
现在假设有一个未知分类的鸢尾花数据\((x_1(花瓣长度),x_2(花瓣宽度))\),用\(p_1(x_1,x_2)\)表示样本属于山鸢尾(red)的概率,用\(p_2(x_1,x_2)\)表示属于杂色鸢尾(blue)的概率,\(p_1(x_1,x_2) + p_2(x_1,x_2) = 1\)。
假设如果\(p_1(x_1,x_2) > p_2(x_1,x_2)\)则\((x_1,x_2)\)为山鸢尾,否则为杂色鸢尾,即选择概率高的类别作为新样本的分类结果。这就是贝叶斯决策理论的核心思想,选择具有最高概率的决策。
如果使用条件概率来表示这个上述所说的分类,则可以表示为
\[
\begin{align}
& p(red|x_1,x_2) > p(blue|x_1,x_2) \quad \text{样本属于山鸢尾} \& p(red|x_1,x_2) < p(blue|x_1,x_2) \quad \text{样本属于杂色鸢尾}
\end{align}
\]
即如果出现一个新样本,假设数据集有\(n\)个特征、\(m\)个分类,只需要计算这个样本的
\[
arg\,max\,(p(red|x_1,x_2),p(blue|x_1,x_2))
\]
如果只有两个特征\(x_1\)和\(x_2\),那么计算并不会很难,按照条件公式计算即可,但是你有没有想过如果有\(n\)特征,\(K\)个分类呢?即计算
\[
\underbrace{arg\,max}_{c_k}\,p(c_j|x_1,x_2,\ldots,x_n) \quad(k=1,2,\cdots,K)
\]
上述的计算量是非常大的,那么我们有没有一种简单的方法能够改善该公式呢?有是有一定有的,即朴素贝叶斯法。
假设现有一个训练集有\(K\)个类别\(c_1,c_2,\ldots,c_k\),\(m\)个样例,每个样例有\(n\)个特征,训练集可以表示为
\[
((x_1^{(1)},x_2^{(1)},\cdots,x_n^{(1)},y_1)(x_1^{(2)},x_2^{(2)},\cdots,x_n^{(2)},y_2),\cdots,(x_1^{(m)},x_2^{(m)},\cdots,x_n^{(m)},y_m))
\]
从样本中可以得到
朴素贝叶斯的先验分布为\(p(c_k) \quad (k=1,2,\ldots,K)\),
朴素贝叶斯的条件概率分布为\(p(x_1,x_2,\ldots,x_n|c_k)\),
利用条件概率公式得到\(X\)和\(Y\)的联合分布\(p(X,Y)\)
\[
\begin{align}
p(X,Y) & = p((x_1,x_2,\ldots,x_n),c_k) \ & = p(c_k)p(x_1,x_2,\ldots,x_n|c_k) \\end{align}
\]
由于\(p(x_1,x_2,\ldots,x_n|c_k)\)是一个\(n\)个维度的条件分布,计算难度超级复杂,因此假设\(X\)的\(n\)个维度之间相互独立(注:如果特征之间有大部分不是独立存在的,则应该尽量不要使用朴素贝叶斯模型,而应该考虑使用其他的分类方法),则可以把这个\(n\)维的条件分布改写成
\[
p(x_1,x_2,\ldots,x_n|c_k) = p(x_1|c_k)p(x_2|c_k)\cdots{p(x_n|c_k)}
\]
虽然改写后的联合分布计算更加简单,但是由于假设所有的特征都是独立的,因此会相应的降低预测的不准确性。
假设已经得到了训练集的\(p(c_k)\)和\(p(x_j|c_k)\)值,假设现有一个测试样本\((x_{1},x_{2},\ldots,x_{n})\),则可以根据贝叶斯公式求得\(K\)个分类\(c_1,c_2,\ldots,c_k\)各自的概率。
\[
\begin{align}
p(c_k|x_{1},x_{2},\ldots,x_{n}) & = {\frac{p(x_{1},x_{2},\ldots,x_{n}|c_k)p(c_k)}{p(x_{1},x_{2},\ldots,x_{n})}} \ & = {\frac{p(x_{1}|c_k)p(x_{2}|c_k)\cdots{p(x_{n}|c_k)p(c_k)}} {p(x_{1},x_{2},\ldots,x_{n})}} \\end{align}
\]
求得所有分类各自的概率之后,哪一个分类的概率最大,则样本属于哪一个分类。
\[
\begin{align}
样本类别 & = max\,(p(c_1|x_{1},x_{2},\ldots,x_{n}),p(c_2|x_{1},x_{2},\ldots,x_{n}),\cdots,p(c_k|x_{1},x_{2},\ldots,x_{n})) \ & = \underbrace{arg\,max}_{c_k}\,{\frac{p(x_{1}|c_k)p(x_{2}|c_k)\cdots{p(x_{n}|c_k)}} {p(x_{1},x_{2},\ldots,x_{n})}} \\end{align}
\]
其中\(y = max\,f(x)\)表示\(y\)是\(f(x)\)中所有的值中最大的输出;\(y = arg\,max f(x)\)表示\(y\)是\(f(x)\)中,输出的那个参数\(t\)。
由于每一个类别的概率公式的分子都是相同的,把分子去掉后则可以把上述公式转化为朴素贝叶斯模型的基本公式
\[
\begin{align}
样本类别 & = \underbrace{arg\,max}_{c_k} {p(x_{1}|c_k)p(x_{2}|c_k)\cdots{p(x_{n}|c_k)p(c_k)}} \ & = \underbrace{arg\,max}_{c_k}\,p(c_k) \prod_{j=1}^{n} p(x_{j}|c_k)
\end{align}
\]
朴素贝叶斯模型的基本公式为
\[
样本类别 = \underbrace{arg\,max}_{c_k}\,p(c_k) \prod_{j=1}^{n} p(x_{j}|c_k)
\]
其中\(p(c_k)\)通过极大似然估计很容易算出样本类别\(c_k\)的出现频率,假设\(c_k\)出现\(m_k\)次,则
\[
p(c_k) = {\frac{m_k}{m}}
\]
而对于\(p(x_j|c_k)\),则需要考虑特征值的取值与分布情况。
假设\(x_j\)是离散值,则可以假设\(x_j\)符合多项式分布,这种情况下的\(p(x_j|c_k)\)是样本类别\(c_k\)中特征\(x_j\)出现的频率,假设\(x_j\)在\(c_k\)中出现的次数为\(m_{k_j}\),则
\[
p(x_j|c_k) = {\frac {m_{k_j}} {m_k} }
\]
由于假设所有特征相互独立,如果某个特征没有出现在某个类别中,则\(p(x_j|c_k) = 0\)会使分类产生偏差,一般采用贝叶斯估计解决该问题,即引入拉普拉斯平滑(Laplace smoothing),即
\[
p(x_j|c_k) = {\frac {m_{k_j} + \lambda} {m_k + S_j\lambda} }
\]
其中\(\lambda\leq0\),当\(\lambda=0\)时为最大似然估计;\(\lambda=1\)时称为拉普拉斯平滑,\(S_j\)为第j个特征可以能取值的个数(注:由于\(x_j\)是离散的值,\(x_j\)有可能出现多次,并且每次出现的值可能不同)。
假设\(x_j\)是非常稀疏的离散值,即各个特征出现的概率很低,这个时候可以假设\(x_j\)符合伯努利分布,即特征\(x_j\)出现为\(1\),不出现为\(0\)。则\(p(x_j|c_k)\)是\(x_j\)在样本类别\(c_k\)中出现的频率,则
\[
p(x_j|c_k) = p(x_j|c_k)x_j + (1- p(x_j|c_k))(1-x_j)
\]
假设\(x_j\)是连续值,则假设\(x_j\)符合高斯分布(正态分布),则可以把\(x_j\)直接带入正态分布公式,即可得
\[
p(x_j|c_k) = {\frac {1} {\sqrt{2\pi\sigma_k^2}} } exp (-{\frac {(x_j - \mu_{k})^2} {2\sigma_k^2}})
\]
其中\(\mu_k\)是所有\(x_j\)的期望值,\(\sigma_k^2\)是所有\(x_j\)的方差
多项式朴素贝叶斯(Multinomial Naive Bayes)特征值符合多项式分布,多用于高维度向量分类,即样本特征为多元离散值,因此最常用于文章分类。
from sklearn.naive_bayes import MultinomialNB
伯努利朴素贝叶斯(Bernoulli Naive Bayes)特征值符合伯努利分布,针对布尔类型特征值的向量做分类,即样本特征为二元离散值,或者为稀疏的多元离散值。
from sklearn.naive_bayes import BernoulliNB
高斯朴素贝叶斯(Gaussian Naive Bayes)特征符合高斯分布,多用于特征值为连续值,可以利用高斯概率密度公式进行分类拟合。
from sklearn.naive_bayes import GaussianNB
有\(m\)个实例\(n\)维特征的数据集
\[
T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}
\]
其中\(x_i\)是第\(i\)个实例的特征向量即\(({x_i}^{(1)},{x_i}^{(2)},\cdots,{x_i}^{(n)})\),\({x_i}^{(j)} \quad(j=1,2,\cdots,n)\)是第\(i\)个实例的第\(j\)个特征,\({x_i}^{(j)}\in\{a_{j1},a_{j2},\cdots,a_{jS_j}\}\),\(a_{jl} \quad(l=1,2,\cdots,S_j)\)是第\(j\)个特征可能的第\(l\)个值,\(y_i\in\{c_1,c_2,\cdots,c_K\}\),\(c_k \quad (k=1,2,\cdots,K)\)是第\(k\)个类;实例\(x\)。
实例\(x\)的类别。
朴素贝叶斯法是基于贝叶斯公式的一个理论,如果能记住贝叶斯公式并对概率论能提前有一个大概的了解,会更利于理解朴素贝叶斯法。
朴素贝叶斯法在能够很好地解决多分类问题,但是由于它最大的缺点,即假设特征都是独立的,所以一般被用于文本分类,因为一般会认为单词与单词之间都是相互独立的。
下一篇将会介绍一个在深度学习流行之前在工业上最常用的分类器,即支持向量机。
标签:学习 color img 次数 proc rac 机器 出现 title
原文地址:https://www.cnblogs.com/nickchen121/p/11686774.html