线性回归(Linear Regression)
12 Jun 20171. 摘要
线性回归(Linear Regression)是一种线性模型,试图通过样本(训练样本)属性的线性组合得到预测函数,以尽可能准确预测新样本的输出。线性回归模型需要训练样本,因此一该模型为基础的机器学习(Machine Learning)被分类为有监督学习(Supervised Learning)。
线性回归,以线性函数表示预测函数(Hypothesis),以最小化代价函数(Cost Function)为目标,利用训练样本通过梯度下降法(Gradient Descent),当然也有其他方法,求得预测函数的的参数,进而得到预测函数。所得预测函数对新样本进行预测,得到预测结果。
通常情况,代价函数为最小二乘代价函数,为什么使用该代价函数,可以用概率中的极大似然估计方法来解释。
原始的线性回归是 Parametric Algorithm,其参数数目固定,由样本特征数目确定。我们还会讲到 Locally weighted linear regression,它是一种 Non-parametric Algorithm,其权重数目随训练样本数目增加而增加,并不固定。
Keywords:Linear Model, Hypothesis, Supervised Learning, LMS, Gradient Descent, Parametric Algorithm, Non-parametric Algorithm, Cost Function
2. 介绍
我们有一个房价的数据集(m个样本):
\(x^{i}\) | 住房面积(平方米)\(x_1\) | 居室数目 \(x_2\) | 房价(百万RMB)\(y^{i}\) |
---|---|---|---|
\(x^{1}\) | 80 | 3 | 299 |
\(x^{2}\) | 100 | 2 | 411 |
\(x^{3}\) | 120 | 3 | 434 |
\(x^{4}\) | 145 | 3 | 499 |
\(\vdots\) | \(\vdots\) | \(\vdots\) | \(\vdots\) |
让我们来用符号表示每个样本:
- \(x^{i}\) 表示样本中的第i个样本, 总样本数为n
- \(x^{i}_{j}\) 表示第i个样本的第j属性(特征),如住房面积,居室数目,总特征个数为n,此例n=2。
- \(y_{i}\) 表示第i个样本对应的真实(目标值),上面的例子中是房价。
有监督学习的流程:训练集–>学习算法–>预测函数或映射函数 \(h\)(hypothesis),喂给预测函数\(h\)一个新的样本,h就吐出一个预测结果(\(y_{prediction}\)),就是对应一个映射\(X \rightarrow Y\),学习算法的预测精度就看这个预测结果与真实值\(y\)之间的差距程度。
这里如果样本真实值(比如房价)是连续的,那么这个学习问题就是回归问题(regression problem);如果真实值是离散的,那么这个学习问题就是分类问题(classification problem).
上面的数据集的真实房价值是连续的,因此根据房价的数据集来预测房价这个问题是个回归问题。预测房价这个问题的关键就在于我们如何确定预测函数(hypothesis)。我们以简单的线性函数来表示:
\[h_{\theta}(x) = \theta_{0} + \theta_{1}x_{1} + \theta_{2}x_{2}\]其中\(\theta_{i}\)是预测函数(映射函数)的参数(parameters,也称为权重 weights)。简化表示的话,我们可以令\(x_{0}=1\),则有:
\[h(x) = \sum_{j=0}^{n} \theta_{j}x_{j} = \Theta^{T}x\]其中,\(\Theta = \begin{bmatrix} \theta_0 \\ \theta_1 \\ \vdots \\ \theta_j \end{bmatrix}, x = \begin{bmatrix} x_0 \\ x_1 \\ \vdots \\ x_j\end{bmatrix}\)
问题来了,如何根据训练样本集来确定预测函数的参数\(\theta\)? 我们的目标是使得\(h(x^{i})\)尽可能接近\(y_{i}\). 我们定义代价函数(式2-1):
\({J(\theta) = \frac{1}{2} \sum_{i=1}^{m}(h_{\theta}(x^i)-y^i)^2} \tag{2-1}\).
这是一个最小二乘代价函数。
以上给出普通最小二乘法回归模型(ordinary least square regression model)。
现在我们的任务就是最小化代价函数\(J(\theta)\),从而得到预测函数参数\(\theta\).
2.1 LMS (Least Mean Squares) Algorithm
LMS update rule , Widsow-Hoff learning rule
先初始化\(\theta\),赋予初始值,然后慢慢改变\(\theta\)以让\(J(\theta)\)尽可能小,知道收敛到一定值,此时我们也就找到参数\(\theta\)。
以梯度下降法(gradient descent algorithm)为例,首先初始化参数\(\theta\),然后不断重复下面的迭代公式:
\[\theta_{j} := \theta_{j} - \alpha \frac{\partial}{\partial\theta_{j}} J(\theta)\]其中\(j = 0, 1, ..., n\). \(\alpha\) 称为学习因子(learning rate)。
对于一个训练样本\((x,y)\), 其
\[\begin{align} \frac{\partial}{\partial \theta_j} J(\theta) &= \frac{\partial}{\partial \theta_j} \frac{1}{2} (h_{\theta}(x)-y)^2 \\ &= (h_{\theta}(x)-y) \cdot \frac{\partial}{\partial \theta_j}(h_{\theta}(x)-y) \\ &= (h_{\theta}(x)-y) \cdot \frac{\partial}{\partial \theta_j} (\sum_{i=0}^{n} \theta_i x_i - y) \\ &= (h_{\theta}(x) - y) x_j \end{align}\]所以,对于单个训练样本, \(\theta_j := \theta_j + \alpha (y^i - h_{\theta}(x^i))x_j^i\). 这就是 LMS(Least mean squares update rule)迭代规则, 也称为 Widrow-Hoff learning rule。 观察更新公式,我们可以发现:
- 更新幅度 和 \(\alpha\) 学习因子 以及 误差项 \((y^i - h_{\theta}(x^i)\)有关,成比例关系;
- 学习因子影响迭代更新
- 误差项也影响迭代步数
Batch Gradien Descent
那么对于具有m个样本的训练集,若预测函数参数的LMS迭代算法为:
对于每个j按式 {
\[\theta_j := \theta_j + \alpha \sum_{i=1}^{m}(y^i-h_{\theta}(x^i))x_j^i\]} 重复迭代,直到收敛。
其中,\(j=0, 1, ..., n\)。推导类似,只要对代价函数\(J(\theta)\)式(2-1) 求导即可。
这种迭代方式称为 batch gradien descent(BGD)(批量梯度下降法)。
Stochastic Gradient Descent
另外一种迭代更新方式为:
Loop {
for i = 1 to m, {
}
}
此方法称为随机梯度下降(stochastic gradient descent(SGD) or incremental gradient descent)
BGD 和 SGD 的区别
- BGD 每一步参数更新是在整个样本集之上,而SGD是在一个样本集上,更新参数。
- 通常 SGD 比 BGD 更快得到参数\(\theta\),使得代价函数最小,但SGD可能不收敛,在最小值附近振荡,但其也接近真实最小值。
- BGD 也容易陷入局部最小区域。
- 因此数据集非常大时,经常采用SGD。
2.2 The normal equations
梯度下降法是最小化代价函数\(J\)的方法。我们也可以使用求导的方式,使得\(\triangledown_{\theta}J(\theta)=0\)而得到参数\(\theta\).
这里我们先用矩阵形式来表示代价函数。
训练集:
\[X= \begin{bmatrix} 1 & x_1^1 &x_2^1 & \cdots & x_n^1 \\ 1 & x_1^2 &x_2^2 & \cdots & x_n^2 \\ \vdots & \vdots & \vdots & \cdots & \vdots \\ 1 & x_1^m & x_2^m & \cdots & x_n^m \end{bmatrix}_{m \cdot (n+1)}\]参数矩阵:
\[\theta = \begin{bmatrix} \theta_0 \\ \theta_1 \\ \vdots \\ \theta_n \end{bmatrix}_{(n+1) \cdot 1}\]目标值:
\[y=\begin{bmatrix} y^1 \\ y^2 \\ \vdots \\ y^m \end{bmatrix}\]因为\(h_{\theta}(x^i) = (x^i)^T\theta\),就有 \(X\theta-y=\begin{bmatrix} h_{\theta}(x^1) - y^1 \\ \vdots \\ h_{\theta}(x^m) - y^m \end{bmatrix}\),再根据向量内积得
\[\begin{align} \frac{1}{2} (X\theta-y)^T(X\theta-y) &= \frac{1}{2} \sum_{i=1}^{m}(h_{\theta}(x^i)-y^i)^2 \\ &= J(\theta) \end{align}\]最后对参数求偏导可以得到(具体推导过程省略,可参考文献1)
\[\triangledown_{\theta}J(\theta) = X^TX\theta - X^Ty\]要是代价函数最小,上面的导数必须为0,就得到 normal equations:\(X^TX\theta = X^Ty\),从而可以求得
\[\theta = (X^TX)^{-1}X^Ty\]这里有个前提就是矩阵\(X^TX\)可逆,只要矩阵X中各列向量线性独立,就可以满足。也就是样本集中样本属性(特征)是线性独立的。
这里我们还可以使用矩阵正交投影的方法来证明。如下:
已知矩阵\(X,y\), 我们的目标是找到参数\(\theta\)使\(X\theta = y\),这里最理想的,然后现实很残酷,我们不一定能找不到参数满足上面理想的等式。但我们能找到的参数满足
\(X\theta \rightarrow y\)即\(X\theta\)近似\(y\),也就是存在一定误差,得到误差向量
\[E=X\theta - y\]从矩阵正交角度理解(可参考文献2),该误差向量垂直于\(X\)中所有的列向量,也就得到
\[X^TE=0 \rightarrow X^T(X\theta-y)=0 \rightarrow X^TX\theta = X^Ty\]若\(X\)中的列向量线性独立,那么就可得到
\[\theta = (X^TX)^{-1}X^Ty\]用矩阵方式来证明更容易。
2.3 Locally weighted linear regression
样本特征的选择对算法的学习性能至关重要。
Locally weighted linear regression(LWR) algorithm which, assuming there is sufficient training data, makes the choice of features less critical.
LWR算法减弱算法性能对样本特征的敏感性。具体实现就是:
- 求取\(\theta\), 使得 \(\sum_i w^i(y^i - \theta^T x^i)^2\) 最小化。
- 得到预测值: \(\theta^T x\).
和原始的线性回归算法,LWR在代价函数中为每个样本增加了对应权重(weights,正数)\(w^i\), 其大小决定最小二乘误差的代价函数中的影响程度。标准的选择是:
\[w^i = e^{(-\frac{(x^i - x)^2}{2\tau^2})}\]这里的\(x\)是我们特定一个点(at which we’re trying to evaluate x),\(\tau\)为 bandwidth。 可以看出,预测样本与训练样本差距越小时,权重接近1,相反,权重就越小。
因此,LWR对每个需要训练样本都需要计算权重,训练样本数越多,则权重数目跟着增多。LWR是“non-parametric algorithm”的一种。
3. Taxonomy
以线性模型为基础,线性回归算法是有监督学习算法中的一种。(模型,算法好混乱。)
4. Inspiration or Interpretation
为什么代价函数选择公式(2-1)的形式? 可用概率方面进入,来解释,使用最大似然估计来解释为什么选择该代价函数。具体可参见文献1-Probabilistic interpretation的讲解。
5. Metaphor
梯度下降法类似爬山坡,一步步下山,找山谷最低点。
6. Strategy
最小二乘回归模型最小化代价函数来得到预测函数的参数。
Procedure
Heuristics
Code Listing
Reference
Beta 1.0
@Anifacc
2017-06-12 (1.0 - 2.2)
人生苦短, 为欢几何.