贝叶斯理论

例子-正向概率

还是拿质检员的例子来做分析,假如我是一个质检员,现在接到了三箱零件需要检验,其中第一箱有10个零件,第二箱有20个零件,第三箱有15个。半小时过去了,检验的结果出炉,第一箱有1个不合格,第二箱有3个不合格,第三箱2个不合格。

箱子 总零件个数 不合格
A 10 1
B 20 3
C 15 2

那现在我从这三个箱子中随便拿取一个零件,这个零件是合格的概率是多少呢?我们假设事件D:零件合格,则:

\begin{equation*}
\begin{split}
P(D)&=P(A)*P(D| A) + P(B) *P(D| B) + P(C)*P(D | C) \\
&=(1/3) * (9/10) + (1/3) * (17/20) + (1/3) * (13/15)  \\
&= 0.872
\end{split}
\end{equation*}

像这样得出一个零件是合格的概率就计算出来了,但是在机器学习领域中,可能我们更想知道,给你一个样本,这个样本属于哪个类目的问题,这也叫分类问题,这就涉及到反向概率的问题。

反向概率-朴素贝叶斯理论

现在我们假设这样一个场景:你拿到了一个零件,这个零件是属于哪个箱子?这个问题在机器学习中就是类比为:给你一个样本,这个样本有很多特征,机器模型输出该样本属于哪个类别。这样我们来理解贝叶斯理论。

条件概率

P(A|B) = \frac{P(AB)}{P(B)}

P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率,P(AB)表示事件A、事件B共同发生的概率,P(B)表示事件B发生的概率,这样就计算就是一个条件概率。 我们结合上面零件合格这个场景继续思考,如果我们知道了这件零件是合格的,那么它是来自A、B、C三类中具体哪个类中?具体哪个类目我们肯定是不知道的,因为三个类目都有合格的零件,但是我们可以知道这件合格的零件来自每个类目的概率是多少,也就是求P(A|D)P(B|D)P(C|D),其中D表示这件零件是合格的概率,由条件概率知道:

\begin{equation*}
\begin{split}
P(A|D) = \frac{P(A*D)}{P(D)} \\
P(B|D) = \frac{P(B*D)}{P(D)} \\
P(C|D) = \frac{P(C*D)}{P(D)} 
\end{split}
\end{equation*}

其中 P(D) 已经在上面计算出来了, P(D)=0.872P(A*D) 表示这件零件来自A箱子,并且是正品的概率,两个条件是独立的,所以我们计算为:

\begin{equation*}
\begin{split}
P(A*D) &=P(A)*P(D|A)\\
&= (1/3) * (9/10)  \\
&=0.3
\end{split}
\end{equation*}

于是我们可以计算合格商品来自每个箱子的概率:

\begin{equation*}
\begin{split}
P(A|D) &= \frac{P(A*D)}{P(D)} \\
&=0.3/0.872 \\
&=0.344 \\
\\
P(B|D) &= \frac{P(B*D)}{P(D)} \\
&=0.283 /0.872\\
&=0.324 \\
\\
P(C|D) &= \frac{P(C*D)}{P(D)} \\
&=0.289/0.872 \\
&=0.332
\end{split}
\end{equation*}

从而知道了合格的零件最可能来自箱子A,因为来自箱子A的概率最高,达到了0.344。从这个例子中我们可以引出贝叶斯理论:

我们假设事件D发生了,求事件D发生是因为事件A的概率,求逆向概率,怎么理解?看下面: 1、假设事件A导致事件D发生的条件概率是:

P(D|A) = \frac{P(D*A)}{P(A)}

所以$$P(D*A)=P(D|A)*P(A)$$ 2、现在事件D发生了,可能是事件A导致的,也可能是事件B导致,或者其他事件导致的,我们想知道,是事件A导致的概率,所以,事件D发生是因为事件A导致的条件概率,公式如下:

P(A|D) = \frac{P(D*A)}{P(D)}

将1步骤中的P(D*A)=P(D|A)*P(A) 代入到本公式中,替换分子P(D*A)得到:

P(A|D) = \frac{P(D|A)*P(A)}{P(D)}

公式推导如上,经过上述两个步骤后,我们可以得到最终的贝叶斯公式:

P(A|D) = \frac{P(D|A)*P(A)}{P(D)}

可能有人问:我们这么转换公式是为了什么?其实推导工程也就用了两次条件概率,正好两次条件概率公式的分子是一样的,用来替换一下,其实这是因为在我们日常中,我们比较容易知道结果,就像你带着眼罩从箱子里随便拿到一个零件,这个零件合格或不合格是容易判断的,但是你怎么知道它是来自哪个箱子的?于是我们的问题就变成了:从三个箱子中拿出一个零件,这个零件是属于某一个箱子的概率,问题角度变了,我们不再关注它是合格还是不合格,合格或不合格很容易知道,但它属于哪个箱子就不容易知道,贝叶斯的提出就是解决这个问题

类比到机器学习领域

好了,我们知道了贝叶斯理论,那么对应到机器学习领域,这个思维怎么转换?类比到机器学习就是:给你一条样本,这个样本的特征给出来了,每个特征的具体数值也给你了,现在请你告诉我它属于哪个类目?当然,这肯定是一条测试集,因为在训练集中,每一条记录都被标记了结果,也就是被打上标签,在二分类任务中,样本属于A类就被标记1,不属于A类就被标记0,形式化描述就是如下:

输入:训练集X_{train}=\{{x_1},{x_2},{x_3},...,{x_n}\} ,测试集 X_{test}=\{{x_1},{x_2},{x_3},...,{x_m}\} 其中x_1=\{{t_1},{t_2},{t_3},...,{t_h}\},每一个样本又h个特征,训练集中每一个样本还有一个label标注结果。

这是比较形式化的一个描述,但又比较抽象,我们可以这么理解,给你测试集的一个样本,这个样本的每个特征数值告诉你了,这相当于告诉你这个零件是合格的还是不合格,然后你来告诉我这个样本是属于哪个类目,也就是 样本中的特征数值 就是上述箱子例子中零件合格这个结果,同时因为训练集有特征数值、每个样本有类目结果,我们可以从训练集入手,比较轻松的计算贝叶斯公式中某些概率,下一节,我们将具体计算。

机器学习中的贝叶斯理论

我们继续将贝叶斯理论结合到机器学习领域,我们假设场景:

背景条件:训练集X_{train}=\{{x_1},{x_2},{x_3},...,{x_n}\},分类结果是C=\{C_1,C_2,...,C_i\},每一条训练集记录对饮一个分类结果 输入:给你一个测试集样本x_1=\{{t_1},{t_2},{t_3},...,{t_h}\} 输出:给出这个样本属于哪个类目

首先思考,一共有i个分类结果,我们可以计算这个样本属于每个分类结果的概率,选取概率大的分类结果作为这条样本的类目,那针对这条样本我们知道每个特征的数值,我们认为这些特征是从训练集中挑选的,每个训练集样本有一个分类结果,于是我们将特征类比为合格,那么这个合格样本来自那个类目?思考如下:

1、样本数据是x_1=\{{t_1},{t_2},{t_3},...,{t_h}\},先取一个特征分析,我们假设取的特征是t_h,根据贝叶斯理论我们知道P(C_i|t_h)公式定义如下:

P(C_i|t_h)= \frac{P(t_h|C_i)*P(C_i)}{P(t_h)}

2、我们针对1中的公式来拆解分析:

  • (1)$P(t_h|C_i)$表示在$C_i$分类中$t_h$出现的概率,我们可以利用训练集中来计算,因为训练集中有这个特征数值,可以计算这个特征数值出现在$C_i$类目样本中的概率
  • (2)$P(C_i)$表示类目$C_i$出现的概率,这个直接计算训练集中$C_i$类目样本占总样本的比例
  • (3)$P(t_h)$表示特征$t_h$出现的概率,计算类似从箱子中取一个合格零件的概率,这里就是从各个类目中抽取这个特征数值的概率

    通过上述的三个步骤就可以计算出特征t_h属于类目C_i的概率。我们继续推广,一个样本记录有多个特征,所以我们假设:

    假设:样本中每个特征之间是互相独立、互不影响的。

    这条假设很重要,因为接下来我们要计算一个样本属于某个类目的概率了。

    P(C_i|x_i),由上述的假设,每个特征都是独立的,则:

    (1)P(x|C_i)=P(t_1|C_i)*P(t_2|C_i)*P(t_3|C_i)...P(t_h|C_i)=\prod_{j=0}^hP(t_j|C_i) (2)P(x)=P(t_1)*P(t_2)*P(t_3)... P(t_h)=\prod_{j=0}^hP(t_j) 所以P(C_i|t_h)公式为:

    P(C_i|x)= \frac{P(x|C_i)*P(C_i)}{P(x)}= \frac{\prod_{j=0}^hP(t_j|C_i)*P(C_i)}{\prod_{j=0}^hP(t_j)}

    这样根据公式P(C_i|x),我们就可以计算出:P(C_1|x)、P(C_1|x)、P(C_i|x)等分类的概率,通过比较大小,我们就可以知道这个这个样本属于哪个类目了,重点是比较概率大小,所以在计算的时候也可以不计算分子,因为分子P(x)对于多有分类结果来说都是一样的,所以直接计算分子比较概率大小。

    P(t_h|C_i)计算

    上文中我们研究了贝叶斯理论实现对样本的分类,但是其中P(t_h|C_i)的计算会有一个问题:如果特征都是离散值,这就可以直接求离散值的占比情况就可以,但是如果特征是连续值,就不好计算了, 通常当特征属性为连续值时,我们假定其值是服从高斯分布(也称正态分布)。即:

    g(x,\sigma,\mu)=\frac{1}{\sqrt{{2\pi}}\times\sigma}e^{\frac{1}{2}(\frac{x-\mu}{\sigma})^2}
    P(t_h|C_i)=g(t_h,\sigma_{C_i},\mu_{C_i})

    因此只要计算出训练集中各个类别中此特征项划分的各均值和标准差,代入上述公式即可得到需要的估计值。另一个需要讨论的问题就是当P(t_h|C_i)=0怎么办,当某个类别下某个特征项划分没有出现时,就是产生这种现象,这会令分类器质量大大降低。为了解决这个问题,我们引入Laplace校准,它的思想非常简单,就是对每类别下所有特征出现的计数加1,这样如果训练样本集数量充分大时,并不会对结果产生影响,并且解决了上述频率为0的尴尬局面。

    总结

    这很多都是自我理解的东西,有些概念、标题可能不是那么准确,也就是拍脑袋想起来的,总结不到位的地方希望大家指出。下回我将讲解贝叶斯理论如何结合实际场景,总之感谢网络上大牛的博客,让我学到了很多内容,此文是自己思考理解的,希望对大家有帮助。

    参考博客

    机器学习:说说贝叶斯分类 算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

  • 猜你喜欢

    转载自juejin.im/post/5bf8b9c0e51d4568655eb2a1
    今日推荐