机器学习领域的一个关键概念——事件发生的不确定性。概率论 为这种不确定性的量化和操纵提供了框架,成为机器学习的核心基础之一。
基于现实世界中所发生现象的任何实际模型,必须要考虑到 随机性 的可能。也就是说,我们所关注的信息可能是事先不可预料的。但是,经过大量重复试验,这种现象往往存在某种 规律性。
因此,表述该现象的模型实质上是概率性的 → \to → 这种模型被称为 概率模型。
示例:投掷一枚质地均匀的硬币。
排除硬币站立等极特殊情况,样本空间 S \mathcal S S中共包含两种情况:
S = { H e a d , T a i l } \mathcal S = \{Head,Tail\} S={Head,Tail}
其中 H e a d Head Head表示“硬币正面朝上”, T a i l Tail Tail表示“硬币反面朝上”。
我们发现,投掷硬币这个试验,确实满足上述两种属性:
我们定义 X \mathcal X X为大量数据试验产生的数据集合(data):
定义该数据集合共包含 N N N个数据样本;
样本维度 数量定义为 p p p;
样本维度,通俗点讲,即使用 一组数值描述数据样本特征,而这组数值的数量即样本维度。 S \mathcal S S中的任意一个样本都可以使用这组数值进行表示。
示例:
如果我们想要统计 收入与人之间 的关联关系,在收集样本时,我们对样本属性进行划分:
性别:0 - 男 \ 1 - 女;
年龄:
学历:0 - 高中\ 1 - 专科\ 2 - 本科\ 3 - 硕士\ 4 - 博士
从事行业:0 - IT行业\ 1 - 金融\ 2 - 服务\ 3 - 管理…
从事年限:0 - 0-1年\ 1 - 1-3年\ 2 - 3-5年\ 3 - 5年以上
婚姻情况:0 - 已婚\ 1 - 未婚
月收入情况:0 - 5000以下\ 1 - 5000-8000\ 2 - 8000-10000\ 3 - 10000以上
现有一个样本描述如下:
一个27岁姑娘,硕士,从事金融行业1年,未婚,月收入9200
使用 向量 表示该样本的特征信息:
[ 1 , 27 , 3 , 1 , 0 , 1 , 2 ] [1,27,3,1,0,1,2] [1,27,3,1,0,1,2]
以上我们从 7个维度 对一个样本进行统计,在数据集合中任意一个样本都可以统计到该特征。
回归正题,使用 数学符号 对数据集合 X \mathcal X X进行表示:
X = ( x ( 1 ) x ( 2 ) x ( 3 ) ⋮ x ( N ) ) \mathcal X = \begin{pmatrix} x^{(1)} \\ x^{(2)} \\ x^{(3)}\\ \vdots \\ x^{(N)} \end{pmatrix} X=⎝⎜⎜⎜⎜⎜⎛x(1)x(2)x(3)⋮x(N)⎠⎟⎟⎟⎟⎟⎞
其中 N N N表示数据集合 X \mathcal X X中包含的样本数量;每一个样本根据 样本维度 可以进行如下表示( x 1 x_1 x1示例):
x ( 1 ) = ( x 1 ( 1 ) , x 2 ( 1 ) , x 3 ( 1 ) , . . . , x p ( 1 ) ) x^{(1)} = \begin{pmatrix} x_1^{(1)},x_2^{(1)} ,x_3^{(1)}, ...,x_p^{(1)} \end{pmatrix} x(1)=(x1(1),x2(1),x3(1),...,xp(1))
可以将其理解成:使用关于样本 x ( 1 ) x^{(1)} x(1)的 p p p个维度的不同结果 x 1 ( 1 ) , x 2 ( 1 ) , x 3 ( 1 ) , . . . , x p ( 1 ) x_1^{(1)},x_2^{(1)} ,x_3^{(1)}, ...,x_p^{(1)} x1(1),x2(1),x3(1),...,xp(1)对 x ( 1 ) x^{(1)} x(1)进行表示。
综上,将样本数量与维度结合,关于样本集合 X \mathcal X X的表示如下( N × p N \times p N×p 的二维矩阵):
X = ( x ( 1 ) x ( 2 ) x ( 3 ) ⋮ x ( N ) ) = ( x 1 ( 1 ) , x 2 ( 1 ) , ⋯ , x p ( 1 ) x 1 ( 2 ) , x 2 ( 2 ) , ⋯ , x p ( 2 ) x 1 ( 3 ) , x 2 ( 3 ) , ⋯ , x p ( 3 ) ⋮ x 1 ( N ) , x 2 ( N ) , ⋯ , x p ( N ) ) N × p \mathcal X = \begin{pmatrix} x^{(1)} \\ x^{(2)} \\ x^{(3)}\\ \vdots \\ x^{(N)} \end{pmatrix} = \begin{pmatrix} x_1^{(1)},x_2^{(1)},\cdots,x_p^{(1)} \\ x_1^{(2)},x_2^{(2)},\cdots,x_p^{(2)} \\ x_1^{(3)},x_2^{(3)},\cdots,x_p^{(3)} \\ \vdots \\ x_1^{(N)},x_2^{(N)},\cdots,x_p^{(N)} \end{pmatrix}_{N\times p} X=⎝⎜⎜⎜⎜⎜⎛x(1)x(2)x(3)⋮x(N)⎠⎟⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎜⎜⎛x1(1),x2(1),⋯,xp(1)x1(2),x2(2),⋯,xp(2)x1(3),x2(3),⋯,xp(3)⋮x1(N),x2(N),⋯,xp(N)⎠⎟⎟⎟⎟⎟⎟⎞N×p
我们将 数据本身 看做概率模型,设该模型的参数(parameter)为 θ \theta θ。
某一样本 x x x可以进行如下表示:
x ∼ P ( x ; θ ) x \sim P(x ; \theta) x∼P(x;θ)
可以将其理解成:在 P ( x ; θ ) P(x; \theta) P(x;θ)的概率分布下,以模型参数 θ \theta θ产生一个又一个的相互独立的 x x x样本,构成 X \mathcal X X数据集合。
样本间相互独立原因是‘每一个样本’均是在相同概率分布下,通过重复试验产生的结果,因此各结果之间不存在关联关系。
例如:投掷两次同一个硬币,第一次正面朝上和第二次正面朝上的概率没有任何关系。
机器学习的核心是通过样本集合 X \mathcal X X学习概率模型的参数 θ \theta θ,并基于 θ \theta θ对新样本进行预测。
频率学派认为:概率分布 P ( x ; θ ) P(x ; \theta) P(x;θ)中的参数 θ \theta θ是一个 未知的常量。数据集合 X \mathcal X X本身是随机变量(Random Variable)。
这里引用黑格尔的一句话很贴切:存在即合理。结合 x ∼ P ( x ; θ ) x \sim P(x ; \theta) x∼P(x;θ),既然 x x x是基于参数 θ \theta θ的概率分布 P ( x ; θ ) P(x ; \theta) P(x;θ)产生出来的样本,每一个样本 x x x的存在都有它的道理。
因此,频率学派通过大量试验产生的样本集合 X \mathcal X X将概率模型参数 θ \theta θ估计出来。常用的方法是 极大似然估计(Maximum Likelihood Estimate,MLE)。
极大似然估计表示如下:
θ M L E = arg max θ P ( X ; θ ) \theta_{MLE} = \mathop{\arg\max}\limits_{\theta} P(X ; \theta) θMLE=θargmaxP(X;θ)
从字面意思来讲,求得一个具体的参数 θ \theta θ,使得数据集合 X \mathcal X X的概率最大。而 数据集合 X \mathcal X X的概率同样可以表示为数据集合内样本的联合概率分布。公式表示如下:
P ( X ; θ ) = P ( x ( 1 ) , x ( 2 ) , . . . , x ( N ) ; θ ) P(X ; \theta) = P(x^{(1)},x^{(2)},...,x^{(N)};\theta) P(X;θ)=P(x(1),x(2),...,x(N);θ)
通常情况下,我们也将极大似然估计表示为如下形式:
θ M L E = arg max θ log P ( X ; θ ) \theta_{MLE} = \mathop{\arg\max}\limits_{\theta} \log P(X ; \theta) θMLE=θargmaxlogP(X;θ)
为什么要加一个 log \log log函数呢?
上面提到,从 P ( x ; θ ) P(x ; \theta) P(x;θ)概率分布中产生相互独立的样本 x x x,我们称 x x x服从于 P ( x ; θ ) P(x ; \theta) P(x;θ)且独立同分布。数学符号记作:
x ∼ iid P ( x ; θ ) x \overset{\text{iid}}{\sim}P(x ; \theta) x∼iidP(x;θ)
因此,数据集合 X \mathcal X X产生的联合概率分布 P ( X ; θ ) P(X; \theta) P(X;θ)表示如下:
P ( X ; θ ) = ∏ i = 1 N P ( x i ; θ ) P(X ; \theta) = \prod_{i=1}^N P(x_i ; \theta) P(X;θ)=i=1∏NP(xi;θ)
我们在处理连乘过程中是非常消耗运算资源的,我们给 P ( X ; θ ) P(X; \theta) P(X;θ)添加一层 log \log log函数,重新观察运算过程:
log P ( X ; θ ) = log ∏ i = 1 N P ( x i ; θ ) = ∑ i = 1 N log P ( x i ; θ ) \begin{aligned} \log P(X; \theta) & = \log \prod_{i=1}^N P(x_i ; \theta) \\ & = \sum_{i=1}^N \log P(x_i ; \theta) \end{aligned} logP(X;θ)=logi=1∏NP(xi;θ)=i=1∑NlogP(xi;θ)
我们发现, log \log log函数将极大似然估计中的乘法运算替换成加法运算,有效降低了运算资源的消耗;
个人理解:若干个概率值相乘(有多少个样本,就有多少个概率结果),它的结果都会无限趋近于零,最终可能会达到计算机能够判定的临界值 -> 这给计算机的计算和判定带来负担,并存在判定错误的隐患。
我们同样发现,新结果中的 P ( x i ∣ θ ) P(x_i \mid \theta) P(xi∣θ)套了一层 log \log log函数,这个 log \log log是否对极大似然估计结果产生影响呢?
log \log log函数图像如下图所示:
我们发现:
相比于频率学派,贝叶斯学派的观点是: P ( x ∣ θ ) P(x \mid \theta) P(x∣θ)中的 参数 θ \theta θ不是一个固定结果,而是和 P ( x ∣ θ ) P(x \mid \theta) P(x∣θ)一样,都是随机变量,且服从某一概率分布。
数学符号表达为:
θ ∼ p ( θ ) \theta \sim p(\theta) θ∼p(θ)
通常情况下,称 p ( θ ) p(\theta) p(θ)为 先验分布(Prior Distributions)。
使用贝叶斯定理,将先验分布、后验分布(Posterior Distributions)、似然(Likelihood)联系起来。
观察 贝叶斯定理:
P ( θ ∣ X ) = P ( X ∣ θ ) ⋅ P ( θ ) P ( X ) P(\theta \mid X) = \frac{P(X \mid \theta) \cdot P(\theta)}{P(X)} P(θ∣X)=P(X)P(X∣θ)⋅P(θ)
其中:
贝叶斯学派对于参数 θ \theta θ分布的常用估计方法:最大后验概率(Maximum A Posteriori)估计
其本意即找到一个后验概率 P ( θ ∣ X ) P(\theta \mid X) P(θ∣X)最优结果所对应参数 θ \theta θ的分布作为最优估计。
θ M A P = arg max θ P ( θ ∣ X ) = arg max θ P ( X ∣ θ ) ⋅ P ( θ ) P ( X ) \begin{aligned} \theta_{MAP} & = \mathop{\arg\max}\limits_{\theta} P(\theta \mid X) \\ & = \mathop{\arg\max}\limits_{\theta} \frac{P(X \mid \theta) \cdot P(\theta)}{P(X)} \end{aligned} θMAP=θargmaxP(θ∣X)=θargmaxP(X)P(X∣θ)⋅P(θ)
观察上式的分母 P ( X ) P(X) P(X):其本质上就是一个关于 X X X的 边缘概率,而 θ \theta θ是一个积分常量。因此 P ( X ) P(X) P(X)和 θ \theta θ无关。(该部分可参考动态规划求解强化学习任务——策略评估[解析解]中的条件概率密度积分
)
∫ θ P ( X ∣ θ ) P ( θ ) d θ = ∫ θ P ( X , θ ) d θ = P ( X ) \int_{\theta} P(X\mid \theta)P(\theta)d\theta = \int _{\theta}P(X,\theta)d\theta = P(X) ∫θP(X∣θ)P(θ)dθ=∫θP(X,θ)dθ=P(X)
因此,上式可以等价为:
θ M A P ∝ arg max θ P ( X ∣ θ ) ⋅ P ( θ ) \theta_{MAP} \propto \mathop{\arg\max}\limits_{\theta} P(X \mid \theta) \cdot P(\theta) θMAP∝θargmaxP(X∣θ)⋅P(θ)
实际上,最大后验概率估计并 不是 标准的贝叶斯学派对于参数 θ \theta θ的估计方法,贝叶斯学派方法本质上就是要求 P ( θ ∣ X ) P(\theta \mid X) P(θ∣X)这个分布本身——贝叶斯估计(Bayesian Estimation)
P ( θ ∣ X ) = P ( X ∣ θ ) ⋅ P ( θ ) ∫ P ( X ∣ θ ) P ( θ ) d θ P(\theta \mid X) = \frac{P(X \mid \theta) \cdot P(\theta)}{\int P(X\mid \theta)P(\theta)d\theta} P(θ∣X)=∫P(X∣θ)P(θ)dθP(X∣θ)⋅P(θ)
贝叶斯估计自身存在弊端,其核心问题在于:要将 P ( X ) P(X) P(X)强行求解。
回顾该式:
P ( X ) = ∫ θ P ( X ∣ θ ) P ( θ ) d θ P(X) = \int_{\theta} P(X\mid \theta)P(\theta)d\theta P(X)=∫θP(X∣θ)P(θ)dθ
由于 θ \theta θ是一个分布,该分布是存在维度的。如果是在低维状态下,积分可以较容易地计算出来,但是如果 θ \theta θ维度较高,这个积分将变得 异常复杂。从而使对后验分布 P ( θ ∣ X ) P(\theta \mid X) P(θ∣X)进行精确计算是几乎无法实现的。因此,可以采用一些近似计算来获取后验分布。
常见的近似求解方法:
回顾最大后验概率估计公式:
θ M A P ∝ arg max θ P ( X ∣ θ ) ⋅ P ( θ ) \theta_{MAP} \propto \mathop{\arg\max}\limits_{\theta} P(X \mid \theta) \cdot P(\theta) θMAP∝θargmaxP(X∣θ)⋅P(θ)
和极大似然估计一样,将 log \log log添加到上式中:
θ M A P ∝ arg max θ log P ( X ∣ θ ) ⋅ P ( θ ) ∝ arg max θ log P ( X ∣ θ ) + log P ( θ ) \begin{aligned} \theta_{MAP} & \propto \mathop{\arg\max}\limits_{\theta} \log P(X \mid \theta) \cdot P(\theta) \\ & \propto \mathop{\arg\max}\limits_{\theta}\log P(X \mid \theta) + \log P(\theta) \end{aligned} θMAP∝θargmaxlogP(X∣θ)⋅P(θ)∝θargmaxlogP(X∣θ)+logP(θ)
和极大似然估计相比,最大后验概率估计多了一项 log P ( θ ) \log P(\theta) logP(θ);
θ M L E = arg max θ log P ( X ∣ θ ) \theta_{MLE} = \mathop{\arg\max}\limits_{\theta} \log P(X \mid \theta) θMLE=θargmaxlogP(X∣θ)
因此,最大后验概率估计不仅要让 log P ( X ∣ θ ) \log P(X \mid \theta) logP(X∣θ)达到最大,而且还要让 log P ( θ ) \log P(\theta) logP(θ)也要达到最大。从而出现 最大后验估计能够影响参数的值朝着先验分布偏移。
使用投掷硬币试验进行说明:
取一个质地均匀的硬币,投掷10次,投掷结果如下:
正面朝上 | 反面朝上 | |
---|---|---|
次数 | 7 | 3 |
设:投掷硬币正面朝上的概率为 p p p,则反面朝上的概率为 ( 1 − p ) (1-p) (1−p)。当前试验使用极大似然估计计算结果:
P ( X ∣ θ ) = ( p ) 7 × ( 1 − p ) 3 P(X \mid \theta) = (p)^7 \times (1-p)^3 P(X∣θ)=(p)7×(1−p)3
对上述结果进行 log \log log操作:
ln ( P ( X ∣ θ ) ) = ln ( ( p ) 7 × ( 1 − p ) 3 ) = 7 ln ( p ) + 3 ln ( 1 − p ) \begin{aligned} \ln(P(X \mid \theta)) & = \ln((p)^7 \times (1-p)^3) \\ & = 7\ln(p) + 3\ln(1-p) \end{aligned} ln(P(X∣θ))=ln((p)7×(1−p)3)=7ln(p)+3ln(1−p)
目的是求解 ln ( P ( X ∣ θ ) ) \ln(P(X \mid \theta)) ln(P(X∣θ))的最大值,对上式进行求导操作:
ln ′ ( P ( X ∣ θ ) ) = 0 → 7 p + 3 p − 1 = 0 → p = 0.7 \begin{aligned} \ln'(P(X \mid \theta)) = 0 \\ \to \frac{7}{p} + \frac{3}{p-1} =0 \\ \to p = 0.7 \end{aligned} ln′(P(X∣θ))=0→p7+p−13=0→p=0.7
在实际运算中同样可以验证这个信息:
代码如下:
def f(x):
return (x ** 7) * ((1 - x) ** 3)
if __name__ == '__main__':
x = np.linspace(0,1,100)
y = [f(i) for i in x]
plt.plot(x,y)
plt.plot([0.7 for _ in y])
plt.show()
至此,使用极大似然估计方法计算得到 投掷硬币正面朝上的概率为0.7。
如果试验之前已经知道该该硬币是质地均匀的:
P ( H e a d ) = P ( T a i l ) = 0.5 P(Head) = P(Tail) = 0.5 P(Head)=P(Tail)=0.5
由于最大后验概率估计中 θ \theta θ是一个分布而不是具体结果,因此假设 p ( θ ) p(\theta) p(θ)是一个均值为0.5,方差为0.1的高斯分布,即:
P ( θ ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 = 1 0.1 × 2 π e − ( p − 0.5 ) 2 0.02 \begin{aligned} P(\theta) & = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x - \mu)^2}{2\sigma^2}} \\ & = \frac{1}{0.1 \times\sqrt{2\pi}} e^{-\frac{(p - 0.5)^2}{0.02}} \end{aligned} P(θ)=2πσ1e−2σ2(x−μ)2=0.1×2π1e−0.02(p−0.5)2
根据最大后验概率估计,计算函数的最值:
ln ( P ( x ∣ θ ) P ( θ ) ) = ln ( P ( x ∣ θ ) ) + ln ( P ( θ ) ) = ln ( ( p ) 7 × ( 1 − p ) 3 ) + ln ( 1 0.1 × 2 π e − ( p − 0.5 ) 2 0.02 ) \begin{aligned} \ln(P(x\mid \theta)P(\theta)) & = \ln(P(x\mid \theta)) + \ln(P(\theta))\\ & = \ln((p)^7 \times (1-p)^3) + \ln(\frac{1}{0.1 \times\sqrt{2\pi}} e^{-\frac{(p - 0.5)^2}{0.02}}) \end{aligned} ln(P(x∣θ)P(θ))=ln(P(x∣θ))+ln(P(θ))=ln((p)7×(1−p)3)+ln(0.1×2π1e−0.02(p−0.5)2)
对该结果求导,可以得到如下式子:
3 p − 1 + 7 p − 100 × ( p − 1 2 ) \frac{3}{p-1} + \frac{7}{p} - 100 \times (p - \frac{1}{2}) p−13+p7−100×(p−21)
对该求导结果求解零点,我们这里使用代码实现(解一元三次方程费眼睛~
)
def diver_opera(x):
return (3 / (x - 1)) + (7 / x) - (100 * (x - 0.5))
if __name__ == '__main__':
x = np.linspace(0,1,500)
dy = [diver_opera(i) for i in x]
plt.plot(x,dy)
plt.plot(x,[0 for i in x])
plt.show()
我们发现,零点位置横坐标约为 p = 0.558 p=0.558 p=0.558。即 通过最大后验概率估计投掷硬币正面朝上的概率为0.558。直接求解 P ( X ∣ θ ) P ( θ ) P(X \mid \theta)P(\theta) P(X∣θ)P(θ)同样能够看到该结果。代码如下:
import math
def norm(x):
return (1 / (0.01 * math.sqrt(2 * math.pi))) * math.exp(-1 * (((x - 0.5) ** 2) / 0.02))
def f(x):
return (x ** 7) * ((1 - x) ** 3) * norm(x)
if __name__ == '__main__':
x = np.linspace(0,1,500)
y_ = [f(i) for i in x]
plt.plot(x,y_)
plt.plot([0.558 for i in y_],y_)
plt.show()
图像结果如下:
但是随着试验次数的增加,极大似然估计的计算结果会越来越准确,而先验知识能够影响的部分也越来越小。
基于上述例子,若改成投掷1000次硬币,正面朝上和反面朝上结果分布如下:
正面朝上 | 反面朝上 | |
---|---|---|
次数 | 700 | 300 |
在不修改先验分布 P ( θ ) P(\theta) P(θ)的前提下,依然使用极大似然估计和最大后验概率估计对 θ \theta θ进行求解:
代码如下:
import math
def norm(x):
return (1 / (0.01 * math.sqrt(2 * math.pi))) * math.exp(-1 * (((x - 0.5) ** 2) / 0.02))
def mle(x):
return (x ** 700) * ((1 - x) ** 300)
def map_operation(x):
return (x ** 700) * ((1 - x) ** 300) * norm(x)
if __name__ == '__main__':
x = np.linspace(0,1,500)
y_mle = [mle(i) for i in x]
y_map = [map_operation(i) for i in x]
plt.plot(x,y_map)
plt.plot(x,y_mle)
plt.show()
图像结果如下(橙色线是 M L E MLE MLE结果,蓝色线是 M A P MAP MAP结果,它们最大值对应的横坐标相差不大( M A P MAP MAP结果要更小一点点)):
我们发现,最大后验概率估计貌似不起作用了,即随着重复试验次数的增加,先验知识的影响在减小。
可能这个硬币确实是个质地不均匀的硬币~
θ M L E = 0.7 , θ M A P = 0.695 \theta_{MLE} = 0.7,\theta_{MAP}=0.695 θMLE=0.7,θMAP=0.695
总结:
相比于极大似然估计的操作,最大后验概率估计相当于在极大似然估计的基础上,乘以一个关于参数 θ \theta θ的先验认识 P ( θ ) P(\theta) P(θ),而 P ( θ ) P(\theta) P(θ)的作用就是 影响参数结果朝着 P ( θ ) P(\theta) P(θ)方向偏移( 0.7 ⟶ 0.5 0.558 0.7 \stackrel{0.5}{\longrightarrow} 0.558 0.7⟶0.50.558),但随着重复试验次数的增多,先验分布的影响力在逐渐减小,但先验分布仍然是 很有必要的。
下一节将介绍高斯分布。
相关参考:
机器学习-白板推导系列(一)-开篇
最大似然估计,最大后验估计以及贝叶斯估计的理解整理