简单线性模型及局部加权线性模型的基本原理和python实现(参数估计的两个基本角度:几何直观和概率直观。函数最值问题的两大基本算法:梯度方法与迭代方法)
线性模型是什么?
线性模型是监督学习的各类学习算法最基本的一类学习算法,所谓线性值得是模型的输出与数据的各个属性值之间的关系是线性的。线性是我们最擅长处理的(无论是工程实现还是数学分析),同时利用线性进行拓展,我们还可以处理很多非线性的情况。
简单线性模型假设我们的样本空间 χ \chi χ与参数 θ \theta θ之间的关系是线性的,如下所示:
y ^ = θ 0 x 0 + θ 1 x 1 + . . . + θ n x n \hat{y} = \theta_0x_0+\theta_1x_1+...+\theta_nx_n y^=θ0x0+θ1x1+...+θnxn记之为 y ^ = h θ ( x ) = θ T x \hat{y} = h_{\theta}(x) = \theta^Tx y^=hθ(x)=θTx,简单线性模型是后面我们将学习的广义线性模型的基础。
求解参数 θ \theta θ的两种角度:几何直观和概率直观
估计上述参数 θ \theta θ的方式,主要有两种,一种是从几何直观,一种是从概率直观。它们分别是:
- 最小二乘方法 (Ordinary Squart Least, OSL)
- 极大似然估计 (Maximum Liklihood Estimate, MLE)
-
最小二乘方法从几何的角度出发,认为拟合值与原值之间的平方误差和应该最小化,因此我们定义了一个损失函数(cost function) 如下:
J ( θ ) = 1 2 ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] 2 J(\theta) = \frac{1}{2}\sum_{i=1}^{m}[h_{\theta}(x^{(i)})-y^{(i)}]^2 J(θ)=21i=1∑m[hθ(x(i))−y(i)]2 参数 θ \theta θ需要使得损失函数最小化。 -
极大似然估计是从概率的角度出发,认为样本数据既然发生了,其背后的概率应该最大化。因此我们首先对模型进行概率解释,即
y = θ 0 x 0 + θ 1 x 1 + . . . + θ n x n + ϵ y = \theta_0x_0+\theta_1x_1+...+\theta_nx_n + \epsilon y=θ0x0+θ1x1+...+θnxn+ϵ然后我们做一个比较合理的假设,即误差的零均值同方差正态假设,因此有
ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim{N(0,\sigma^2)} ϵ∼N(0,σ2)所以标签值 y y y的分布为 y ∼ N ( θ T x , σ 2 ) y\sim{N(\theta^Tx,\sigma^2)} y∼N(θTx,σ2)因此整个样本数据的概率似然函数为
L ( θ ) = ∑ i = 1 m 1 2 π σ e x p ( − ( y ( i ) − h θ ( x ( i ) ) ) 2 σ 2 ) L(\theta) = \sum_{i=1}^{m}\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)}-h_{\theta}(x^{(i)}))^2}{\sigma^2}) L(θ)=i=1∑m2πσ1exp(−σ2(y(i)−hθ(x(i)))2)那么参数 θ \theta θ需要使得似然函数最大化。
以上两种参数估计的方法最终都归结为某个函数形式的最值问题,下面我们讨论如何求解非线性函数的最值。
函数最值问题的两大数值算法
- 梯度方法
- 批量梯度下降(Batch Gradient Descent, BGD)
- 随机梯度下降(Stochastic Gradient Descent, SGD)
- 迭代方法
- 一般迭代法
- 牛顿迭代法
梯度方法
梯度是微积分中概念。在映射 f : R n → R f:R^n \rightarrow R f:Rn→R中,它是一个 n n n维向量,其方向是该点处切平面增长最快的方向,在微分中,因为我们用切平面的增量近似函数的增量,所以梯度的方向也是该点函数增长最快的方向。从而利用自变量空间中关于 f f f的梯度场,就可以保证达到某个极值,在凸性的保证,还可以保证其达到最值。
迭代方法
我们详细介绍迭代方法。首先我们知道最值点的必要条件是稳定点,即导数为0。因此我们实际上需要一个寻找函数零点的方法。一般来讲,迭代方法可以分为两类:
- 直接法(连续函数的中值定理)
- 间接法
直接法有我们熟悉的二分法等,我们略去不谈。这里要重点介绍间接法。我们首先谈迭代法的一般理论,然后再谈广泛使用的牛顿迭代法及其多元形式。
在一维情况下,由 f ( x ) = 0 f(x)=0 f(x)=0可以尝试得到:
x = φ ( x ) x=\varphi(x) x=φ(x)当 ∣ φ ′ ( x ) ∣ < 1 \mid \varphi^{'}(x)\mid < 1 ∣φ′(x)∣<1在区间 [ a , b ] [a,b] [a,b]成立时,则可以证明在由迭代式 x n = φ ( x n − 1 ) x_{n}=\varphi(x_{n-1}) xn=φ(xn−1)产生的迭代序列 { x n } \{x_{n}\} {
xn}收敛于 x ∗ x^* x∗,其中 x 0 ∈ [ a , b ] x_0\in[a,b] x0∈[a,b]。从而有
lim n → ∞ x n = lim n → ∞ φ ( x n − 1 ) = x ∗ \lim_{n\to\infty}x_{n}=\lim_{n\to\infty}\varphi(x_{n-1})=x^* n→∞limxn=n→∞limφ(xn−1)=x∗
现在我们讨论牛顿迭代法。其基本思想在于做切线不断逼近零点。假设我们面对的函数为 f ( x ) f(x) f(x),则在初始值 x 0 x_0 x0处的切线为 y − y 0 = f ′ ( x 0 ) ( x − x 0 ) y-y_0 = f^{'}(x_0)(x-x_0) y−y0=f′(x0)(x−x0)令 y = 0 y=0 y=0得到 x 1 x_1 x1,从而不断迭代逼近真实值,其迭代式为
x n = φ ( x n − 1 ) = x n − 1 − f ( x n − 1 ) f ′ ( x n − 1 ) x_n = \varphi(x_{n-1}) = x_{n-1}-\frac{f(x_{n-1})}{f^{'}(x_{n-1})} xn=φ(xn−1)=xn−1−f′