一元线性回归

一元线性回归的表示

样本和训练集的表示

$ m $ 表示训练集中的样本数;

$ x $ 表示输入变量,$ y $ 表示输出变量;

$ (x,y) $ 表示训练集中的样本,$ (x^{(i)},y^{(i)}) $ 表示一个具体的样本;

假设函数

用于拟合的假设函数表示为:

$$ h_{\theta}(x) = \theta_0 + \theta_1 x $$

其中 $ h_{\theta}(x_i) $ 是预测值; $ \theta_i $ 是参数,可以初始化为 0,并在计算过程中逐步逼近最优。

一元线性回归的目标

算法目标

即通过学习算法(LA)找到一个足够好的 $ h_{\theta}(x) $, 当输入新的 $ x $ 时,能准确预测出 $ y $。这个过程可以表示为:

$$ arg \ min_{\theta_0,\theta_1} J(\theta_0,\theta_1) $$

即最小化代价函数的过程。下面研究如何找到这样的 $ h_{\theta}(x) $:

代价函数

可以用代价函数(Cost Function)来评价 $ h_{\theta}(x) $ 的优劣:

$$ J(\theta_0,\theta1) = \dfrac{1}{2m} \sum{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2 $$

它是一个均方误差函数(MSE, Mean Squared Error)。代价函数的值越小,说明 $ h_{\theta}(x) $ 就越可靠。

一元线性回归的梯度下降法

计算过程

梯度下降算法(Gradient Descent)的具体过程如下:

  1. 随机选择一个参数的组合 $ (\theta_0, \theta_1, \cdots, \theta_n) $,也可均初始化为 0;
  2. 计算代价函数 $ J(\theta_0, \theta_1, \cdots, \theta_n) $;
  3. 修正 $ (\theta_0, \theta_1, \cdots, \theta_n) $——即通过学习率来改变,使代价函数的值降低;
  4. 重复 2 – 3 步骤,直至找到一个局部最小值(local minimum)——不同初始参数可能得到不同的局部最小值。

学习率(步长)

在计算过程中,$ \theta $ 的值可以通过规定一个 $ \alpha $,即学习率(learning rate)或步长(step size)来改变:

$$ \theta_j=\theta_j-\alpha \dfrac{\partial}{\partial \theta_j}J(\theta_0,\theta_1) $$

对一元线性回归:

$$ \begin{cases} \dfrac{\partial}{\partial \theta_0}J(\theta_0,\theta_1) = \dfrac{1}{m} \displaystyle\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)}) \\ \dfrac{\partial}{\partial \theta_1}J(\theta_0,\theta_1) = \dfrac{1}{m} \displaystyle\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)} \end{cases} $$

计算过程中,所有的 $ \theta $ 均需改变。

当 $ \alpha $ 过小时,可能收敛很慢;当 $ \alpha $ 过大时,$ J(\theta_0,\theta_1) $ 可能不是朝同一“方向”逐渐降低的,而会在局部最小值附近振荡,无法收敛。为选择合适的 $ \alpha $,可每迭代若干次后,对其进行指数或线性衰减。

多元线性回归

多元线性回归的表示

样本和训练集的表示

大致与一元线性回归相同,且:

$ n $ 表示特征的数量;

$ x^{(i)} $ 表示第 i 个训练样本,$ x_j^{(i)} $ 表示第 i 个训练样本的第 j 个特征。

假设函数

用于拟合的假设函数表示为:

$$ h_{\theta}(x) = \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 + … +\theta_n x_n, x_0=1 $$

可将 $ x $ 和 $ \theta $ 用向量表示:

$$ x= \begin{bmatrix} x_0 \\ x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix}, \theta = \begin{bmatrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ \vdots \\ \theta_n \end{bmatrix} $$

则:

$$ h_{\theta}(x) = \theta^T x $$

多元线性回归的梯度下降法

大致与 1.3.1 相同,$ \theta $ 的更新可表示为:

$$ \theta_j = \thetaj – \alpha \dfrac{1}{m} \sum{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} $$

梯度下降算法调优

特征放缩

可通过特征放缩,将特征数据归一化(尽量使 $ -1\le x_i \le 1 $)。通常有以下几种方法:

简单归一化:

$$ x_i = \dfrac{x_i}{max(x_i)} $$

均值归一化:

$$ x_i = \dfrac{x_i – \mu_i}{std_i} $$

最大最小值归一化:

$$ x_i = \dfrac{x_i – min(x_i)}{max(x_i) – min(x_i)} $$

收敛观测

可通过绘制迭代次数和代价函数的曲线来观测算法何时趋于收敛;也可将代价函数的变化值和某个阈值(如 0.001)相比较,小于该值时停止迭代;还应该合理选择学习率。

多元线性回归的正规方程法

计算过程

将训练集表示为以下矩阵:

$$ X= \begin{bmatrix} &x_0^{(0)} &x_1^{(0)} &x_2^{(0)} &\cdots &x_n^{(0)} \\ &x_0^{(1)} &x_1^{(1)} &x_2^{(1)} &\cdots &x_n^{(1)} \\ &x_0^{(2)} &x_1^{(2)} &x_2^{(2)} &\cdots &x_n^{(2)} \\ &\vdots &\vdots &\vdots & &\vdots \\ &x_0^{(m-1)} &x_1^{(m-1)} &x_2^{(m-1)} &\cdots &x_n^{(m-1)} \end{bmatrix}, y= \begin{bmatrix} y^{(0)} \\ y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m-1)} \end{bmatrix} $$

则有:

$$ \theta = (X^TX)^{-1}X^Ty $$

即只通过一次运算直接得到各 $ \theta $ 的值。

梯度下降与正规方程的比较

梯度下降需要选择合适的 $ \alpha $,需要多轮迭代;当特征数 n 很大时也能较好地使用;适用于各种类型的模型。

正规方程则不需要 $ \alpha $,只需一次运算;计算 $ (X^TX)^{-1} $ 的时间复杂度为 $ O(n^3) $;只适用于线性模型。