先验分布(先验概率)
先验分布(prior distribution)一译“验前分布”“事前分布”.
- 把θ看作是随机变量. θ的分布函数记为H(θ), θ的密度函数记为h(θ), 分别称为先验分布函数和先验密度函数, 两者合称为先验分布
- 与试验结果无关, 或与随机抽样无关, 反映在进行统计试验之前根据其他有关参数θ的知识而得到的分布.
后验分布(后验概率)
因为这个分布是在抽样以后才得到的, 故称为后验分布
- 根据样本 x 的分布P(θ), 以及θ的先验分布π(θ), 用概率论中求条件概率分布的方法,可算出在已知X=x的条件下,θ的条件分布 π(θ|x).
- 后验分布可看成是在获得样本 x 后对参数先验知识θ的调整
贝叶斯公式(贝叶斯法则)
- 支持某项属性的事件发生得愈多, 则该属性成立的可能性就愈大.
- 通常, 事件A在事件B(发生)的条件下的概率, 与事件B在事件A的条件下的概率是不一样的;然而, 这两者是有确定的关系,贝叶斯法则就是这种关系的陈述
公式
- P(A∩B) = P(A) * P(B|A)=P(B) * P(A|B). 也可变形为:P(A|B)=P(B|A) * P(A)/P(B).
备注
- P(A∩B)=A与B同时发生的概率
- P(A∪B)=A或B发生的概率(即PA+PB)
- P(AB)=P(A∩B)
- P(A+B)=P(A∪B)
- P(A)是A的先验概率或边缘概率. 之所以称为"先验"是因为它不考虑任何B方面的因素.
- P(A|B)是已知B发生后A的条件概率, 也由于得自B的取值而被称作A的后验概率.
- P(B|A)是已知A发生后B的条件概率, 也由于得自A的取值而被称作B的后验概率.
- P(B)是B的先验概率或边缘概率, 也作标准化常量(normalized constant)
应用
- 例如:一座别墅在过去的 20 年里一共发生过 2 次被盗, 别墅的主人有一条狗, 狗平均每周晚上叫 3 次, 在盗贼入侵时狗叫的概率被估计为 0.9, 问题是:在狗叫的时候发生入侵的概率是多少?
- 我们假设 A 事件为狗在晚上叫, B 为盗贼入侵, 则以天为单位统计, P(A) = 3/7, P(B) = 2/(20 * 365) = 2/7300, P(A|B) = 0.9, 按照公式很容易得出结果:P(B|A) = 0.9 * (2/7300) / (3/7) = 0.00058
残差
- 残差在数理统计中是指实际观察值与估计值(拟合值)之间的差.
最小二乘法
- 最小二乘法就是求最小化残差(residual)的平方和的方法
- 例如有一个特征样本:(xi, yi)(i=1,2,3...,m), 样本函数hθ=θ0 + θ1x + θ2x2 + ... θ2nn,θ(θ0,θ1,θ2...), 最小二乘法就是找到一组θ1,θ2...), 使得\sum_{i=0}^nhθ(xi)-yi)2最小, 即求 min\sum_{i=0}^nhθ(xi)-yi)2
贝叶斯统计
采用贝叶斯公式进行统计推断, 称为贝叶斯统计.
贝叶斯线性回归
-
贝叶斯线性回归(Bayesian linear regression)是使用统计学中贝叶斯推断(Bayesian inference)方法求解的线性回归(linear regression)模型
-
贝叶斯线性回归将线性模型的参数视为随机变量(random variable),并通过模型参数(权重系数)的先验(prior)计算其后验(posterior)
-
贝叶斯线性回归拟合函数为: yi = Σθixin + ξi, 求解结果为θ值
求解过程
import numpy as np
import scipy as sp
import pylab as pl
from scipy.optimize import leastsq
# 目标函数(先验分布)
def target_func(x):
return np.sin(2 * np.pi * x)
# 多项式函数(后验分布, 拟合函数)
def fit_func(p, x):
f = np.poly1d(p)
return f(x)
# 残差函数
def residuals_func(p, y, x):
ret = fit_func(p, x) - y # 残差
# L2范数作为正则化项, 避免过拟合
regularization = 0.0001
ret = np.append(ret, np.sqrt(0.5*regularization*np.square(p)))
return ret
x = np.linspace(0, 1, 9) # θ值: [0, 1] 之间生成9个数值
y0 = target_func(x) # 目标数组
y1 = [np.random.normal(0, 0.1) + y for y in y0] # 添加正太分布噪声后的目标数组
n = 9
p_init = np.random.randn(n) # 随机生成 (0, 1) 之间生成9个数值, 作为参数
# 最小二乘法求 p_init 最优解
plsq = leastsq(residuals_func, p_init, args=(y1, x))
print('Fitting Parameters: ', plsq[0]) # 输出拟合参数
# 图形化展示拟合函数和目标函数的差异
x_points = np.linspace(0, 1, 1000)
pl.plot(x_points, target_func(x_points), label='real')
pl.plot(x_points, fit_func(plsq[0], x_points), label='fitted curve')
pl.plot(x, y1, 'bo', label='with noise')
pl.legend()
pl.show()
高斯回归
- 高斯过程回归的关键前提假设是: 给定一些 X的值,对应的这些Y值服从联合正态分布
- 高斯回归就是已知一组未知函数的输入x和输出y, 预测任意新输入x 对应的y值
- 高斯回归核函数为: yi = zxi + ξi, 求解结果为预测新的x对应的值
求解过程
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial.distance import cdist
# 已知x, y数组
x_training = np.array([-3, -1.5, 0, 1.5, 2.5, 2.7])
y_training = np.sin(x_training)
# 显示规律
plt.plot(x_training, y_training, label="training")
# 核函数, 需要体现先验分布
def squared_exponential_kernel(x1, x2):
if x1.ndim == 1 and x2.ndim == 1:
x1 = x1.reshape(-1, 1)
x2 = x2.reshape(-1, 1)
dx = cdist(x1, x2) # 计算两组数据每个点的距离
return np.exp(-(dx ** 2) / 2) # e**x 值
# 新的输入值x
x_linspace = np.linspace(-3.2,3.2,100)
# 协方矩阵
K = squared_exponential_kernel(x_training, x_training)
K_star = squared_exponential_kernel(x_linspace, x_training)
# 预测曲线
K_inv = np.linalg.inv(K) # 反转矩阵
y_predict = K_star.dot(K_inv).dot(y_training) # 预测值
plt.plot(x_linspace, y_predict, label="predict")
# 实际曲线
plt.plot(x_linspace, np.sin(x_linspace), label="real")
# 偏差
K_star_2 = squared_exponential_kernel(x_linspace, x_linspace)
cov = K_star_2 - K_star.dot(K_inv).dot(K_star.T)
std = np.sqrt(cov.diagonal())
c = 1.96 # for confidence interval
plt.fill_between(x_linspace, y_predict - c * std, y_predict + c * std, color='gray', alpha=0.2)
# show
plt.legend(loc='best')
plt.show()
似然函数
-
给定输出x时, 关于参数θ的似然函数L(θ|x)(在数值上)等于给定参数θ后变量X的概率:L(θ|x)=P(X=x|θ)
-
似然函数是已知发生了某些事件, 我们希望知道参数应该是多少
-
似然函数的重要性不是它的具体取值, 而是当参数变化时函数到底变小还是变大. 对同一个似然函数, 如果存在一个参数值, 使得它的函数值达到最大的话, 那么这个值就是最为“合理”的参数值
最大似然估计
- 假设我们有个样本 x1, x2, x3..., 它们每一个变量都对应一个似然函数: f(x1|θ), f(x2|θ), f(x3|θ)..., 我们现在把这些似然函数乘起来: like(θ) = f(x1|θ) * f(x2|θ) * f(x3|θ) * ..., 我们只要找到令like(θ)最大的θ值, 便是我们想要的参数值.
应用
涉及到似然函数的许多应用中, 更方便的是使用似然函数的自然对数形式, 即“对数似然函数”.
求解一个函数的极大化往往需要求解该函数的关于未知参数的偏导数. 由于对数函数是单调递增的, 而且对数似然函数在极大化求解时较为方便, 所以对数似然函数常用在最大似然估计及相关领域中.
标准分数
-
也叫Z分数或真分数, z=(x-μ)/σ, 其中x为某一具体分数, μ为平均数, σ为标准差
-
是以标准差为单位来表示一个值x在团体中相对平均值的距离
-
由z分数组成的分布有两个特点:一是z分数的平均等于0;二是其标准差等于1
置信区间
-
置信区间是置信上限和置信下限为上下界构成的区间, 该区间包含了参数θ真值的可信程度
-
若显著性水平为α, 则置信度为(1-α), 置信区间为(α, 1-α), 通常情况下, 取α=0.05, 即取置信区间为(0.5, 0.95)
-
对于一组给定的样本数据, 其平均值为μ, 标准偏差为σ, 平均值为100, 对于莫个观测值, 则其置信区间为(μ-Ζα/2σ , μ+Ζα/2σ), 其中α为非置信水平在正态分布内的覆盖面积, Ζα/2即为对应的标准分数
求解过程
- 求一个样本的均值
- 计算出抽样误差。经过实践,通常认为调查:100个样本的抽样误差为±10%;500个样本的抽样误差为±5%;1200个样本时的抽样误差为±3%。
- 用1求出的“样本均值”加、减第2步计算的“抽样误差”,得出置信区间的两个端点