Skip to content

应用数学基础

本章对应Ian经典教材的第二章:线性代数,第三章:概率与信息论。

附:Excersize

Ex.1 线性代数练习

在上面我们已经知道线性代数在机器学习中的作用了。简单来说就是当我们有一个输入vector后,如果我们能找到一个合适的矩阵A,那么我们就能得到一个结果vector。

练习1:Prove that \(A^{T}A\) is symmetric for any \(A \in\mathbb{R}^{m \times n}\)

\(A^T\)的意思是矩阵的转置(Transpose),操作就是把一个矩阵的行和列互换,比如:

$$ A = \begin{bmatrix}

1 & 2 & 3 \

4 & 5 & 6

\end{bmatrix} $$

transpose后:

$$ A^T = \begin{bmatrix}

1 & 4 \

2 & 5 \

3 & 6

\end{bmatrix} $$

然后\(A \in \mathbb{R}^{m \times n}\)的意思是矩阵A的归属是实数(Real Numbers),然后行数x列数为\(m*n\)。组合起来就是说A是一个m行n列的矩阵,并且矩阵中的所有元素都是实数。

对于两个矩阵的乘法,计算过程就是用第一个矩阵的第一行,先和第二个矩阵的每一列相乘,得到新的矩阵的第一行;然后用第一个矩阵的第二行,再依次和第二个矩阵的每一列相乘,得到新的矩阵的第二行。也就是说新的矩阵的行数,等于第一个矩阵的行数;新的矩阵的列数,等于第二个矩阵的列数。因此矩阵的乘法是不可交换的,A x B,和B x A,是两个不同的计算过程。

我们拿上述的A和A^T来试算一下:

$$ A^T A =

\begin{bmatrix}

1 & 4 \

2 & 5 \

3 & 6

\end{bmatrix}

\begin{bmatrix}

1 & 2 & 3 \

4 & 5 & 6

\end{bmatrix} $$

计算过程:

$$ \begin{aligned}

(A^T A)_{11} &= 1\cdot1 + 4\cdot4 = 1 + 16 = 17 \

(A^T A)_{12} &= 1\cdot2 + 4\cdot5 = 2 + 20 = 22 \

(A^T A)_{13} &= 1\cdot3 + 4\cdot6 = 3 + 24 = 27 \

(A^T A)_{21} &= 2\cdot1 + 5\cdot4 = 2 + 20 = 22 \

(A^T A)_{22} &= 2\cdot2 + 5\cdot5 = 4 + 25 = 29 \

(A^T A)_{23} &= 2\cdot3 + 5\cdot6 = 6 + 30 = 36 \

(A^T A)_{31} &= 3\cdot1 + 6\cdot4 = 3 + 24 = 27 \

(A^T A)_{32} &= 3\cdot2 + 6\cdot5 = 6 + 30 = 36 \

(A^T A)_{33} &= 3\cdot3 + 6\cdot6 = 9 + 36 = 45

\end{aligned} $$

得到结果:

$$ A^T A =

\begin{bmatrix}

17 & 22 & 27 \

22 & 29 & 36 \

27 & 36 & 45

\end{bmatrix} $$

请注意观察

  • 元素(1,2) 和 元素(2,1) 都是 22。
  • 元素(1,3) 和 元素(3,1) 都是 27。
  • 元素(2,3) 和 元素(3,2) 都是 36。

这个矩阵沿着对角线是完美对称的,也就是题目中所问的symmetric。

我们现在反过来,算一下A * A^T:

$$ A A^T =

\begin{bmatrix}

1 & 2 & 3 \

4 & 5 & 6

\end{bmatrix}

\begin{bmatrix}

1 & 4 \

2 & 5 \

3 & 6

\end{bmatrix} $$

逐项计算:

$$ \begin{aligned}

(AA^T)_{11} &= 1\cdot1 + 2\cdot2 + 3\cdot3 = 1 + 4 + 9 = 14 \

(AA^T)_{12} &= 1\cdot4 + 2\cdot5 + 3\cdot6 = 4 + 10 + 18 = 32 \

(AA^T)_{21} &= 4\cdot1 + 5\cdot2 + 6\cdot3 = 4 + 10 + 18 = 32 \

(AA^T)_{22} &= 4\cdot4 + 5\cdot5 + 6\cdot6 = 16 + 25 + 36 = 77

\end{aligned} $$

最终结果:

$$ A A^T =

\begin{bmatrix}

14 & 32 \

32 & 77

\end{bmatrix} $$

这个结果也是对称的,但是结果却不同。

我们要关注两件事情:

1.结果是对称的

2.先后顺序在机器学习中的应用

首先,结果是对称的,说明两个矩阵的关系是相互的。即:

  • 矩阵 S 的元素 S[i, j] 代表了 “事物 i” 与 “事物 j” 的关系。
  • 矩阵 S 的元素 S[j, i] 代表了 “事物 j” 与 “事物 i” 的关系。

对称性 S[i, j] = S[j, i] 就意味着:

ij 的影响/关系,和 ji 的影响/关系是完全一样的。

也就是说:

  • 如果一个矩阵描述的是“城市间的飞行距离”,那它必然是对称的。纽约到波士顿的距离,等于波士顿到纽约的距离。
  • 如果一个矩阵描述的是“特征间的相关性”,那它必然是对称的。“身高”与“体重”的相关性,和“体重”与“身高”的相关性是同一个数值。

这个特性是我们用来衡量两个特征之间相关性的标准方法。

其次,假如A矩阵代表的是数据集矩阵,其每一行代表一个数据样本,比如一个病人、一栋房子、一朵花,那m行就代表我们有m个样本。然后A的每一列代表一个特征,比如房子的面积、卧室的数量,那么我们就有了n个 特征。

对于\(m*n\)的矩阵A,\(A^TA\)的含义是feature correclation matrix特征相关性矩阵,其结果是一个\(n*n\)的新矩阵,这个新矩阵衡量的是n个特征两两之间的关系。这种用法常在Linear Regression线性回归和PCA主成分分析中使用。简单来说,就是告诉我们数据集的特征之间是如何相互关联的,这是分析数据结构的基础。

而对于\(AA^T\),我们将得到一个\(m*m\)的新矩阵。这个新矩阵衡量的是样本两两之间的关系,因此视角是以样本为中心的。别忘了,我们刚才说过,m行代表的是m个样本。那么利用这种结果,我们可以找到两个样本之间特征是否相似。这个在SVMs支持向量机、Kernel Methods核方法、Clustering聚类分析中使用的比较多。

好,那现在我们理解了对称性和矩阵乘法在机器学习中的作用后,我们再来证明一下该命题。利用乘积的转置法则和转置的转置法则,我们可以得到:

\[ (A^T A)^T = A^T (A^T)^T = A^T A. \]

练习2:

考虑以下矩阵,请找出B的singular values(奇异值):

$$ B = \begin{bmatrix}

1 & 0 \

0 & 2 \

2 & 1

\end{bmatrix} $$

singular values是线性代数中极其重要的概念,这个值能快速提取出一个矩阵的重要核心信息。比如说,你喝了一杯很好喝的鸡尾酒,假设这个鸡尾酒就是上面这个B,那么你一定想要知道这个鸡尾酒的配方是什么。比如这个鸡尾酒有如下风味:

  • 风味A:香甜
  • 风味B:酸涩
  • 风味C:清凉

然后你给这些风味打分:

  • 香甜:10分
  • 酸涩:7分
  • 清凉:1分

这几个分数,就是奇异值!其中香甜是这杯鸡尾酒最大的特征,其次是酸涩和清凉。换句话说,奇异值就是一个复杂事务(如一个矩阵、一张图片、一杯鸡尾酒)中各个核心组成部分的重要性排名。

以上面的矩阵B为例,他的奇异值如下:

  • \(\sigma_{1} = \sqrt{7}\)
  • \(\sigma_{2} = \sqrt{3}\)

这两个抽象的sigma,揭示了B矩阵这个变换的核心本质。其意义包括:

  • 几何上的意义:B将二维空间 的单位圆变换成三维空间的椭圆的时候的最大和最小的 拉伸比例
  • 信息的重要性和降维:如果B是一个数据集,那么第一个奇异值将代表数据的主要变化和信息
  • 用途:按\(\sigma_1\)进行数据压缩,可以保留B矩阵最核心的特征

具体的用途在之后遇到时我们再详细讲解。

奇异值计算步骤通常是:

  1. 计算 B 的转置矩阵 BT。
  2. 计算 BT 与 B 的乘积,得到一个新的方阵 (BTB)。
  3. 计算矩阵 BTB 的特征值 (eigenvalues)。
  4. 将这些特征值取正平方根,得到的结果就是矩阵 B 的奇异值。

那么对于矩阵B,其转置矩阵与B的乘积:

$$ B^T B =

\begin{bmatrix}

1 & 0 & 2 \

0 & 2 & 1

\end{bmatrix}

\begin{bmatrix}

1 & 0 \

0 & 2 \

2 & 1

\end{bmatrix} $$

计算得到:

$$ \begin{bmatrix}

1\cdot1 + 0\cdot0 + 2\cdot2 & 1\cdot0 + 0\cdot2 + 2\cdot1 \

0\cdot1 + 2\cdot0 + 1\cdot2 & 0\cdot0 + 2\cdot2 + 1\cdot1

\end{bmatrix}

=

\begin{bmatrix}

5 & 2 \

2 & 5

\end{bmatrix} $$

用这个结果代入矩阵的characteristic polynomial特征多项式

\[ p(\lambda) = \det(A - \lambda I) \]

这里的p是polynomial多项式的首字母缩写,一般代表多项式。lambda是eigenvalue特征值,在这里作为一个变量存在。

这里的det是Determinant的缩写,中文是行列式。行列式是作用于一个行数和列数相等的矩阵的函数,他会计算出一个标量。这个标量浓缩了关于这个矩阵变换的很多重要信息。正因如此,我们才在一开始需要通过计算B转置和B的乘积,来得到一个方阵。

对于一个2x2的矩阵,det就是主对角线(从左上角到右下角)上元素的乘积,减去副对角线上元素的乘积。3x3和更大的矩阵,则需要更多不同的技巧,这里就不赘述了。我们只要记住,我们可以用det操作得到一个方阵的特征多项式并找到这个方阵的奇异值就可以了。具体的计算我们可以依赖NumPy库来完成:


import numpy as np

M = np.array([

    [4, 2, 1, 0],

    [1, 3, 2, 1],

    [0, 1, 5, 2],

    [2, 3, 1, 1]

])


# 3. 调用 np.linalg.det() 函数计算行列式

# 无论矩阵是2x2, 4x4, 还是100x100,调用的函数都是同一个

determinant_value = np.linalg.det(M)


# 4. 打印出原始矩阵和计算结果

print("创建的4x4矩阵 M:")

print(M)

print("\n计算出的行列式 det(M):")

print(determinant_value)

其中\(I\)是单位矩阵,我们现在可以得到这个特征多项式了:

$$ \det !\left(

\begin{bmatrix}

5 & 2 \

2 & 5

\end{bmatrix}

  • \lambda

\begin{bmatrix}

1 & 0 \

0 & 1

\end{bmatrix}

\right)

=

\det !\begin{bmatrix}

5 - \lambda & 2 \

2 & 5 - \lambda

\end{bmatrix} $$

\[ = (5 - \lambda)(5 - \lambda) - (2)(2) \]
\[ = (5 - \lambda)^2 - 4 \]
\[ = \lambda^2 - 10\lambda + 21 \]

得到该特征多项式后,我们可以把让该多项式等于0,即可得到特征多项式的特征值:

\[ \lambda^2 - 10\lambda + 21 = 0 \]
\[ (\lambda - 7)(\lambda - 3) = 0 \]
\[ \lambda_1 = 7, \quad \lambda_2 = 3 \]

得到两个特征值后,我们就可以得到奇异值了。奇异值是两个特征值的平方根(严格来说,奇异值是\(A^TA\)的特征值开方,而对于对称正定矩阵,\(A^TA=A^2\),所以奇异值就是特征值的正平方根),因此:

$$ \sigma_1 = \sqrt{\lambda_1} = \sqrt{7},

\quad

\sigma_2 = \sqrt{\lambda_2} = \sqrt{3} $$


Ex.2 链式法则练习

练习1: Consider the function

\[ f(x,y) = \sigma(ax + by), \]

where

$$ a, b \in\mathbb{R},

\quad

\sigma(t) = \frac{1}{1 + e^{-t}} \quad for

\quad t \in\mathbb{R}. $$

首先我们来看一下这个函数f(x, y) = σ(ax + by),这是一个接收x和y两个变量作为输入的函数。他的计算过程是两步:

  1. 先计算 ax + by。这在机器学习里叫做输入的 线性组合ab可以看作是权重)。
  2. 然后将这个结果作为输入,传递给另一个函数 σσ 在这里被称为 激活函数 (Activation Function)

然后再看一下 σ(t),这个函数有一个非常著名的名字,叫 Sigmoid 函数 ,也叫 Logistic 函数。它的作用是把任何一个实数 t(无论多大或多小)都压缩到 (0, 1) 这个区间内。因为这个特性,它经常在机器学习中被用来表示概率。

所以,整个函数 f(x,y) 的意思就是:接收输入 xy,用权重 ab 进行加权求和,然后用 Sigmoid 函数处理这个和,得到一个 0到1 之间的最终输出。

(a) Show that

\[ \frac{d\sigma}{dt} = \sigma(t)\big(1 - \sigma(t)\big) \]

解答:

$$ \frac{d}{dt}\sigma(t)

= \frac{d}{dt}\left(\frac{1}{1+e^{-t}}\right) $$

\[ = \frac{e^{-t}}{(1+e^{-t})^2} \]
\[ = \left(\frac{1}{1+e^{-t}}\right)\left(\frac{1+e^{-t}}{1+e^{-t}} - \frac{1}{1+e^{-t}}\right) \]
\[ = \sigma(t)\big(1-\sigma(t)\big) \]

这个结论在机器学习中非常有名且非常常用,因为它让求导(也就是求梯度)变得非常方便。

(b) Using the result you showed in part(a) and the chain rule, compute \(\frac{\partial f}{\partial x}\) and \(\frac{\partial f}{\partial y}\).

我们来计算函数 \(f(x, y) = \sigma(ax + by)\)\(x\)\(y\) 的偏导数。

首先计算 \(\frac{\partial f}{\partial x}\)。这是一个复合函数,为了应用链式法则,我们视内层的线性部分 \(ax + by\) 为一个整体,并记作 \(z\)。这样函数就变成了 \(f = \sigma(z)\)

根据链式法则,\(f\)\(x\) 的导数等于外层函数对 \(z\) 的导数与内层函数对 \(x\) 的导数的乘积:

$$ \frac{\partial f}{\partial x}

= \frac{d\sigma}{dz} \cdot\frac{\partial z}{\partial x} $$

我们知道第一问的结论是 \(\frac{d\sigma}{dz} = \sigma(z)\big(1 - \sigma(z)\big)\),同时,内层函数对 \(x\) 的偏导数是 \(\frac{\partial z}{\partial x} = a\)

将这两部分相乘,我们得到:

$$ \frac{\partial f}{\partial x}

= \sigma(z)\big(1 - \sigma(z)\big) \cdot a $$

最后,我们将 \(z = ax + by\) 代回,并整理成您提供的最终格式:

$$ \frac{\partial f}{\partial x}

= \boxed{a \, \sigma(ax + by)\big[1 - \sigma(ax + by)\big]} $$

计算对 \(y\) 的偏导数 \(\frac{\partial f}{\partial y}\) 的过程完全同理。链式法则的应用如下:

$$ \frac{\partial f}{\partial y}

= \frac{d\sigma}{dz} \cdot\frac{\partial z}{\partial y} $$

其中,外层函数的导数部分不变,我们只需计算内层函数对 \(y\) 的偏导数,即 \(\frac{\partial z}{\partial y} = b\)

将它们相乘得到:

$$ \frac{\partial f}{\partial y}

= \sigma(z)\big(1 - \sigma(z)\big) \cdot b $$

同样地,将 \(z = ax + by\) 代回,我们得到关于 \(y\) 的最终偏导数:

$$ \frac{\partial f}{\partial y}

= \boxed{b \, \sigma(ax + by)\big[1 - \sigma(ax + by)\big]} $$


练习2:

For

$$ \mathbf{x} =

\begin{bmatrix}

x_{1} \

\vdots \

x_{n}

\end{bmatrix}

\in\mathbb{R}^n $$

define

\[ r(\mathbf{x}) = \sum_{j=1}^{n} x_j^2 \]

Compute the partial derivative \(\frac{\partial r}{\partial x_i}\) for a generic coordinate \(i \in \{1, \ldots, n\}\)

解答:

这道题定义了一个向量x,该向量由n个分量组成。然后定义了一个函数r(x),其计算方式是将向量x的每一个分量都进行平方,然后将所有结果相加。数学表达式为:

$$ r(\mathbf{x}) = \sum_{j=1}^{n} x_j^2

= x_1^2 + x_2^2 + \cdots + x_n^2 $$

这个函数实际上计算的是向量 x 的欧几里得范数(即向量长度)的平方。

而题目要求我们来计算函数r相对于其任意一个分量\(x_i\)的偏导数(partial derivative)。

在计算偏导数\(\frac{\partial r}{\partial x_i}\)的时候,我们要将除了\(x_i\)之外的其他所有分量都当作常数来处理,因此对于上述展开的r(x),很显然,如果除了\(x_i\)之外的其他分量都被视为常数,那么这些常数在求导的过程中会变为0,也即:

$$ \frac{\partial}{\partial x_i}(x_j^2) = 0

\quad (\text{对于所有 } j \ne i) $$

那么根据幂函数的求导法则($\frac{d}{dx} x^k = k x^{k-1} $),我们可以得到

\[ \frac{\partial}{\partial x_i}(x_i^2) = 2x_i \]

由于其他项都是0,因此:

\[ \frac{\partial r}{\partial x_i} = 2x_i \]

练习3:

Let $\mathbf{w} \in\mathbb{R}^n $ be a constant vector and define the scalar function

$$ s(\mathbf{x}) = \mathbf{w}^\top\mathbf{x}

= \sum_{j=1}^{n} w_j x_j $$

Compute \(\frac{\partial s}{\partial x_i}\) for a generic coordinate \(i \in \{1, \ldots, n\}\)

解答:

这道题的意思就是给你一个固定的 n 维向量 w 和一个变量 n 维向量 x 。用这两个向量的点积定义了一个函数 s(x)。现在请你求出这个函数 s 相对于变量向量 x 的第 i 个分量 xi 的偏导数。

比如假设 n=3,那么:

*\(w=w1,w2,w3\)(三个固定的数)

  • \(x=x1,x2,x3\) (三个变量)
  • \(s(\mathbf{x}) = w_1 x_1 + w_2 x_2 + w_3 x_3\)

我们要求的就是用一个通用的表达式来代表\(\frac{\partial s}{\partial x_i}\)

那么对于这种题,其实我们把函数s(x)展开来写就很清晰了:

\[ s(\mathbf{x}) = \sum_{j=1}^{n} w_j x_j = w_1 x_1 + w_2 x_2 + \cdots + w_i x_i + \cdots + w_n x_n \]

现在对上面展开的式子求导:

\[ \frac{\partial s}{\partial x_i} = \frac{\partial}{\partial x_i} \left( w_1 x_1 + w_2 x_2 + \cdots + w_i x_i + \cdots + w_n x_n \right) \]

利用导数的加法法则,我们可以对每一项分别求导:

$$ \frac{\partial s}{\partial x_i}

= \frac{\partial}{\partial x_i}(w_1 x_1)

  • \frac{\partial}{\partial x_i}(w_2 x_2)

  • \cdots

  • \frac{\partial}{\partial x_i}(w_i x_i)

  • \cdots

  • \frac{\partial}{\partial x_i}(w_n x_n) $$

和练习2类似,当我们对wi求导的时候,非wi的项目在求导中都被视为常数,因此求导后是0.

而对于wi的目标项,可以得到:

$$ \frac{\partial}{\partial x_i}(w_i x_i)

= w_i \cdot\frac{\partial}{\partial x_i}(x_i)

= w_i \cdot1

= w_i $$

所以:

\[ \frac{\partial s}{\partial x_i} = 0 + 0 + \cdots + w_i + \cdots + 0 = w_i \]

Ex.3 概率论练习

An incoming email is spam with prior \(p(S)=0.2\) and not spam with \(p(\bar{S}) = 0.8\).

Two independent filters flag spam:

\[ p(F_{1} = 1\mid S) = 0.9, \quad p(F_{1} = 1\mid\bar{S}) = 0.1, \]
\[ p(F_{2} = 1\mid S) = 0.8, \quad p(F_{2} = 1\mid\bar{S}) = 0.05, \]

annd \(F_1, F_2\) are inndependent given the class \((S or \bar{S})\).

(a) What is the probability that both filters flag an email as spam?

首先,我们把题目给出的所有信息翻译成通俗的语言:

p(S) = 0.2: "S" 代表 "Spam" (垃圾邮件)。这句话的意思是,在没有任何其他信息的情况下,一封随机收到的邮件是 垃圾邮件的概率为20% 。这是 先验概率* 。

p(S̄) = 0.8: "S̄" 代表 "Not Spam" (非垃圾邮件)。一封邮件 不是垃圾邮件的概率为80%* 。同样是先验概率。

接下来是关于两个垃圾邮件过滤器(Filter 1 和 Filter 2)的信息:

p(F₁=1 | S) = 0.9: F₁=1 表示“过滤器1将邮件标记为垃圾邮件”。这句话的意思是:如果一封邮件确实是*垃圾邮件,那么过滤器1有90%的概率能正确地把它标记出来(这是过滤器1的“召回率”或“真阳性率”)。

p(F₁=1 | S̄) = 0.1: 如果一封邮件不是*垃圾邮件,过滤器1仍然有10%的概率会错误地把它标记为垃圾邮件(这是过滤器1的“假阳性率”)。

p(F₂=1 | S) = 0.8: 如果一封邮件确实是*垃圾邮件,过滤器2有80%的概率能正确标记它。

p(F₂=1 | S̄) = 0.05: 如果一封邮件不是*垃圾邮件,过滤器2有5%的概率会错误标记它。

最后一句关键信息:

F₁, F₂ are independent given the class (S or S̄): 这叫做 条件独立 。意思是:一旦我们确定了一封邮件的真实类别(是垃圾邮件,或不是),那么两个过滤器的判断就 互不影响* 。

  • 例如,对于一封已知的垃圾邮件,过滤器1是否标记它,和过滤器2是否标记它,是两个可以相乘的独立概率事件。

这一小问问的是:“ 两个过滤器同时把一封邮件标记为垃圾邮件的总概率是多少?

这里的关键点在于,这个问题并没有告诉你这封邮件 本身到底是不是垃圾邮件 。所以,要计算这个总概率,你必须考虑两种可能发生并导致这个结果的 互斥场景

场景一* :这封邮件 确实是垃圾邮件(S)** ,并且两个过滤器都正确地标记了它。

场景二* :这封邮件 其实不是垃圾邮件(S̄)** ,但两个过滤器都犯了错误,同时标记了它。

这道题最终想让你计算的,就是 场景一发生的概率 + 场景二发生的概率 。这背后运用的原理就是我们之前提过的 全概率公式

我们可以分别计算两个场景的概率,然后得到答案:

场景一:

邮件是垃圾邮件(S),并且两个filter都标记了它。我们计算这个特定场景发生的联合概率: \(P(A \cap S)\),根据条件概率的定义,我们知道:

\[ P(A \cap S) = P(A|S) \times P(S) \]

由于\(P(S)\)是已知的先验概率,为0.2。\(P(A \mid S)\)指的是“在一封确认为垃圾邮件的邮件中,两个filter都标记它的概率”。因为题目已经说明两个filter条件独立,所以我们可以将他们相乘:

\[ P(A|S) = P(F_{1} = 1 | S) \times P(F_{2} = 1 | S) \]

代入数值得到:

\[ P(A|S) = 0.9\times0.8 = 0.72 \]

场景一的总概率便得到了:

\[ P(A \cap S) = 0.72\times0.2 = 0.144 \]

同理,场景二的总概率\(P(A \cap \bar{S})\)也可以用同样的方法得到:

\[ P(A \cap\bar{S}) = P(A|\bar{S}) \times P(\bar{S}) \]
\[ P(A|\bar{S}) = P(F_{1} = 1 | \bar{S}) \times P(F_{2} = 1 | \bar{S}) \]
\[ P(A|\bar{S}) = 0.1\times0.05 = 0.005 \]
\[ P(A \cap\bar{S}) = 0.005\times0.8 = 0.004 \]

把两个互斥场景的概率相加,即得到总概率:

\[ P(A) = P(A \cap S) + P(A \cap\bar{S}) \]
\[ P(A) = 0.144 + 0.004 = 0.148 \]

(b) Given that both filters flag an email, what is the probability of the email being spam? (You can leave your answer as an unsimplified fraction.)

在上一问,我们算出了被两个filter同时标记为垃圾邮件的概率。而这一问问的则是,对于那些已经被两个filter同时标记的邮件,其为真垃圾邮件的比例是多少。这是一个后验概率。

回忆一下贝叶斯公式:

\[ P(Y \mid X) = \frac{P(X \mid Y) P(Y)}{P(X)} \]

在这道题中:

  • Y = 邮件真的是垃圾邮件(S)
  • X = 邮件被两个filters同时标记(我们之前称之为事件A)

所以代入到贝叶斯公式中,可以得到 :

\[ P(S \mid A) = \frac{P(A \mid S) P(S)}{P(A)} = \frac{P(A \cap S)}{P(A)} \]

翻译一下就是:

P(邮件是垃圾 | 被两个滤镜标记) = P(邮件是垃圾 并且 被两个滤镜标记) / P(被两个滤镜标记)

在第一问中,我们已经知道:

  • \(P(A) = 0.148\)
  • \(P(A \cap S)=0.144\)

代入可得:

\[ P(S \mid A) = \frac{0.144}{0.148} \approx0.973. \]

.