研二找工作季,面试了虎牙直播和一些创业型公司,问到了一些问题都没能很好地回答出来,本文特来梳理一些知识点~~
一枚硬币,扔了一亿次都是正面朝上,再扔一次反面朝上的概率是多少?
才知道这原来是知乎上的问题~当时面试的时候第一反应就是想着应该概率还是1,但是没敢说出来,还是对概率论掌握的不够。
先给出知乎上的一个比较令人信服的答案:
假设这个硬币是“均匀稳定”的(不是质地不均匀或者两面均为正面的硬币),也就是每次抛硬币得到反面的概率为 p p p,如果称事件“抛一次硬币得到反面”为 A A A,事件“抛一次硬币得到正面”为 B B B,则显然有:
p ( A ) = p , p ( B ) = 1 − p p(A) = p, p(B) = 1-p p(A)=p,p(B)=1−p
现在我们不知道这个硬币的任何信息, p p p可能是0到1之间的任何数。那么如果我们抛了 n n n次硬币, n n n次都是正面,这个概率是 p ( B ) = ( 1 − p ) n p(B) = (1-p)^n p(B)=(1−p)n
现在我们知道这个事件发生了,不论 n n n是多少它发生了,也就是概率在目前的观测下为1。那么为了给 p p p一个合理的猜测,我当然要最大化 "抛 n n n次硬币 n n n次都是正面"这个已经发生的事件的概率(要尽最大可能利用已有信息嘛)。也就是说要解这个优化问题 a r g m a x ( 1 − p ) n argmax(1-p)^n argmax(1−p)n。显然, p p p越小, 1 − p 1-p 1−p越大,优化目标越大,所以p=0。
这个结果为什么反直觉是因为我们根据实际经验,抛一次硬币得到反面的概率是0.5附近。把这样的直觉定量化,引入一个先验知识 p p p是一个0.5为中心的正态分布,太靠近0或者1我们不信,那么我们猜测的时候要优化的问题就从 a r g m a x ( 1 − p ) n argmax(1-p)^n argmax(1−p)n变成了 a r g m a x N ( 0.5 , σ ) ( 1 − p ) n argmaxN(0.5, \sigma)(1-p)^n argmaxN(0.5,σ)(1−p)n。这样就会惩罚p过分靠近0或1的情况,通过引入额外的信息来让结果更符合实际情况。这就叫极大后验估计(Maximum A Posterior)而不是极大似然估计(Maximum Likelihood)了
以上就是这道题的一个比较完整的回答了,在这里我要在复习一下最大似然(MLE)和最大后验(MAP)这两个知识点:
似然函数:
对于函数 p ( x ∣ θ ) p(x|\theta) p(x∣θ),输入有两个: x x x表示某一个具体的数据, θ \theta θ表示模型的参数。
如果 θ \theta θ是已经确定的, x x x是变量,这个函数为概率函数,它描述对于不同的样本点 x x x,其出现的概率是多少。
如果 x x x是已经确定的, θ \theta θ是变量,这个函数为似然函数,它描述对于不用的模型参数,出现 x x x这个样本点的概率是多少。
最大似然估计(MLE)是求参数 θ \theta θ,使得似然函数 p ( x 0 ∣ θ ) p(x_0|\theta) p(x0∣θ)最大,而最大后验概率估计(MAP)是想求 θ \theta θ使得 p ( x 0 ∣ θ ) p ( θ ) p(x_0|\theta)p(\theta) p(x0∣θ)p(θ)最大,也就是说求得的 θ \theta θ不单让似然函数大,也使其先验概率变大(有点像正则化中加惩罚项的思想,不过这里用的是乘法)。
其实后验概率严格的表达式为 p ( θ ∣ x ) = p ( x 0 ∣ θ ) p ( θ ) p ( x 0 ) p(\theta|x) = \frac{p(x_0|\theta)p(\theta)}{p(x_0)} p(θ∣x)=p(x0)p(x0∣θ)p(θ),只不过这里的 x 0 x_0 x0是确定的,所以 p ( x 0 ) p(x_0) p(x0)是一个已知值,因此在MAP问题中去掉了分母。
举例:
假设有一个造币厂生产某种硬币,现在我们拿到了一枚这种硬币,想试试这硬币是不是均匀的。即想知道抛这枚硬币,正反面出现的概率(记为 θ \theta θ)各是多少?
解决统计问题首先需要的是数据,于是我们拿这枚硬币抛了10次,得到的数据( x 0 x_0 x0)是:反正正正正反正正正反。我们想求的正面概率 θ \theta θ是模型参数,而抛硬币模型我们可以假设是 二项分布。
那么,出现实验结果 x 0 x_0 x0(即反正正正正反正正正反)的似然函数是多少呢?
f ( x 0 , θ ) = ( 1 − θ ) ∗ θ ∗ θ ∗ θ ∗ θ ∗ ( 1 − θ ) ∗ θ ∗ θ ∗ θ ∗ ( 1 − θ ) = ( θ ) 7 ( 1 − θ ) 3 = f ( θ ) f(x_0, \theta) = (1-\theta)*\theta*\theta*\theta*\theta*(1-\theta)*\theta*\theta*\theta*(1-\theta) = (\theta)^7(1-\theta)^3 = f(\theta) f(x0,θ)=(1−θ)∗θ∗θ∗θ∗θ∗(1−θ)∗θ∗θ∗θ∗(1−θ)=(θ)7(1−θ)3=f(θ)
注意这里是关于 θ \theta θ的一个函数,对于MLE而言就是最大化这个函数,得到的值为 θ = 0.7 \theta=0.7 θ=0.7。这样,我们已经完成了对θ的最大似然估计。即,抛10次硬币,发现7次硬币正面向上,最大似然估计认为正面向上的概率是0.7。(ummm…这非常直观合理,对吧?)
然而,一些人可能会说,硬币一般都是均匀的啊! 就算你做实验发现结果是“反正正正正反正正正反”,我也不信 θ = 0.7 \theta=0.7 θ=0.7,于是又开始做MAP估计,即最大化# p ( x 0 ∣ θ ) p ( θ ) p(x_0|\theta)p(\theta) p(x0∣θ)p(θ),这里我们假设 p ( θ ) = N ( 0.5 , σ ) p(\theta)=N(0.5, \sigma) p(θ)=N(0.5,σ),最后求得的 θ = 0.696 \theta=0.696 θ=0.696,这样也不得不承认 θ \theta θ在0.7附近了。
矩阵求逆的时间复杂度
其实问到这一题的时候有点懵,因为我对矩阵求逆的记忆还停留在"高斯消元法"(也就是行列变换)的阶段,突然要计算时间复杂度真的无从下手,看了一个小时现在总算有点明白了。
首先要清楚如何求解矩阵的逆,主要有以下几种方法:
高斯消元法:行列变换;
LU分解:将原矩阵分解为一个下三角矩阵L和一个上三角矩阵U,然后根据三角矩阵的求逆"套路"计算L和U的逆矩阵,得到相应的原矩阵的逆。
奇异值分解
QR分解
这里主要说下LU分解,具体分解过程如下图:
将一个n阶方阵A进行LU分解的计算量估计:
这里解释一下为什么第一步的运算量为
n
2
n^2
n2:
以
a
11
a_{11}
a11为主元,消去
a
21
a_{21}
a21,首先需要让第一行乘以某个数(第一行
n
n
n个元素做了
n
n
n次乘法运算),再将第一行和第二行相加或相减(第一行
n
n
n个元素和第二行
n
n
n个元素相加,共进行了
n
n
n次加法运算),如果把一组乘法和加法看做一次运算,则第二行的消元进行了
n
n
n次运算,共
n
−
1
n-1
n−1行需要进行类似的运算,故第一次消元共进行了
n
(
n
−
1
)
≈
n
2
n(n-1) \approx n^2
n(n−1)≈n2次运算。
正交矩阵与正定矩阵
这里问到的就比较简单了,就是矩阵分析中的一些概念,简单叙述如下:
正交矩阵:
简单来说就是 Q Q T = I QQ^T=I QQT=I,其实这里包含了两点:一是行向量、列向量均为单位向量;二是行向量和列向量皆为正交,即二者内积为0。
这里放一张wiki的截图:
正定矩阵:
一个 n ∗ n n*n n∗n的实对称矩阵 M M M是正定的,当且仅当对于所有的非零实系数向量 z z z,都有 z T M z > 0 z^TMz>0 zTMz>0,其中 z T z^T zT表示为 z z z的转置。
正定矩阵有很多的性质,其中一条就是正定矩阵的所有特征值均为正数(>0)。
而对于半正定矩阵,其所有的特征值均为非负数(>=0)。