前言
参考:
- 机器学习—周志华(西瓜书)
- 部分网络的内容(主要是CHH3213的博客)
线性回归
介绍
- 线性:两个变量之间的关系是一次函数关系的——图象是直线,叫做线性。
- 非线性:两个变量之间的关系不是一次函数关系的——图象不是直线,叫做非线性。
- 回归:人们在测量事物的时候因为客观条件所限,求得的都是测量值,而不是事物真实的值,为了能够得到真实值,无限次的进行测量,最后通过这些测量数据计算回归到真实值,这就是回归的由来。
线性回归问题就是试图学到一个线性模型尽可能准确地预测新样本的输出值。解决的就是通过已知的数据得到未知的结果。例如:对房价的预测、判断信用评价、电影票房预估等。
分析
有时输入的属性值并不能直接被我们的学习模型所用,需要进行相应的处理。
- 对于连续值的属性,一般都可以被学习器所用,有时会根据具体的情形作相应的预处理,例如:归一化等;
- 对于离散值的属性,可作下面的处理:
若属性值之间存在“序关系”,则可以将其转化为连续值,例如:身高属性分为“高”“中等”“矮”,可转化为数值:{1, 0.5, 0}。
若属性值之间不存在“序关系”,则通常将其转化为向量的形式,例如:性别属性分为“男”“女”,可转化为二维向量:{(1,0),(0,1)}。
一元线性回归
模型
假设我们的数据为\mathbf{x}=\begin{bmatrix}x_1\\x_2\\\vdots\\x_n\end{bmatrix}和\mathbf{y}=\begin{bmatrix}y_1\\y_2\\\vdots\\y_n\end{bmatrix}
则模型为
::: align-center
f(x_i)=\omega\cdot x_i+b
:::
策略
我们将均方误差MSE作为损失函数,在下面的算法中尝试最小化它来计算\omega和b
::: align-center
\begin{aligned}
&(\omega^*,b)=\arg \min\sum_{i=1}^{m}(y_i-f(x_i))^2(MSE)\\
&=\arg \min\sum_{i=1}^{m}(y_i-\omega x_i-b)^2\\
&E(\omega,b)=\sum_{i=1}^{m}(y_i-\omega x_i-b)^2
\end{aligned}
:::
算法
此时可使用解析方法求解
::: align-center
\begin{aligned}&\frac{\partial E}{\partial \omega}=0\\
&\frac{\partial E}{\partial b}=0
\end{aligned}
:::
解方程可得
::: align-center
\begin{aligned}
&\omega=\frac{\sum_{i=i}^{m}y_i(x_i-\overline{x})}{\sum_{i=1}^{m}x_i^2-\frac{1}{m}(\sum_{i=1}^mx_i)^2}\\
&b=\frac{1}{m}\sum_{i=1}^m(y_i-\omega x_i)
\end{aligned}
:::
此值一定在最小值点取到,读者可自行使用Hessian矩阵验证,由柯西-施瓦兹不等式可得Hessian矩阵正定
上方的\omega此表达式还有几种形式,常见的还有
::: align-center
\omega=\frac{S_{XY}}{S_{XX}}=\frac{\sum_i(X_i-\bar{X})(Y_i-\bar{Y})}{\sum_i(X_i-\bar{X})^2}=\frac{\sum_i X_iY_i-n\bar{X}\bar{Y}}{\sum_i X_i^2-n\bar{X}^2}
:::
截距为
::: align-center
b=\bar{Y}-\omega\bar{X}
:::
OLS
假设我们有一个包含N_p个数据点的数据集,对于每个数据点i,我们有一个特征向量x_i和真实值y_i,目标是找到一个函数(模型),能够根据x来预测y,现在我们使用一元线性模型
::: align-center
\hat{y}=mx+c
:::
其中:
- \hat{y}是预测值
- m是斜率
- c是截距
我们将c和m组合为一个参数向量\theta:
::: align-center
\theta=(c,m)^T
:::
同样的,可以将所有的特征数据构造成一个设计矩阵(Design Matrix)X,它带有一列偏置:
::: align-center
X=\begin{pmatrix}1&x_1\\1&x_2\\\vdots&\vdots\\1&x_{N_p}\end{pmatrix}
:::
则有:
::: align-center
\hat{y}=X\theta
:::
损失使用MSE
::: align-center
\mathcal{E}(\theta)=\frac{1}{N_p}\sum_{i=1}^{N_p}(y_i-\hat{y}_i)^2=\frac{1}{N_p}||y-X\theta||_2^2
:::
这里我们使用另一种方法——变分法来解决问题,考虑给当前参数\theta加上一个微小的扰动向量v,因为N_p不影响最小化的位置,我们暂时忽略它,现在损失变为
::: align-center
N_p\mathcal{E}(\theta+v)=||y-X(\theta+v)||_2^2=||y-X\theta-Xv||_2^2
:::
将其展为内积
::: align-center
\begin{aligned}
||y-X\theta-Xv||_2^2&=
:::
因为有
::: align-center
:::
所以原式
::: align-center
\begin{aligned}
&=||y-X\theta||_2^2+2
:::
故有
::: align-center
\mathcal{E}(\theta+v)=\mathcal{E}(\theta)+\frac{2}{N_p}
:::
观察第三项\frac{1}{N_p}||Xv||_2^2,它总大于0
关键在第二项\frac{2}{N_p}
因此为了确保\theta点任何微小的移动v都不会让成本减小,唯一的办法就是让此线性项的系数为零,即
::: align-center
X^T(X\theta-y)=0
:::
即
::: align-center
X^TX\theta=X^Ty
:::
这个方程被称为正规方程
当此条件满足时,成本函数的变化简化为
::: align-center
\mathcal{E}(\theta+v)=\mathcal{E}(\theta)+\frac{1}{N_p}||Xv||_2^2\ge\mathcal{E}(\theta)
:::
所以解析方法得到\theta可以通过求解正规方程得到
拟合效果分析
本处介绍几种分析拟合效果的方法
几个指标
首先是相关系数\rho_{XY}或r
::: align-center
r=\frac{S_{XY}}{\sqrt{S_{XX}S_{XY}}}=\frac{\sum_i (X_i-\bar{X})(Y_i-\bar{Y})}{\sqrt{\sum_i(X_i-\bar{X})^2\sum_i(Y_i-\bar{Y})^2}}=\frac{n\sum_i X_iY_i-\sum_i X_i\sum_iY_i}{\sqrt{n\sum_i X_i^2-(\sum_iX_i)^2}\sqrt{n\sum_i Y_i^2-(\sum_iY_i)^2}}
:::
其值属于[-1,1],反映自因变量之间的线性相关性关系,绝对值越接近1线性关系越强
其次是决定系数(通常也叫做R方)
::: align-center
R^2=\frac{SSR}{SST}=1-\frac{SSE}{SST}
:::
其中SSR是回归平方和:SSR=\sum(\hat{y_i}-\bar{y})^2
SSE是残差平方和SSE=\sum(\hat{y}_i-y_i)^2
SST是总平方和:SST=\sum(y_i-\bar{y})^2
其值属于[0,1],反映模型的拟合优度(对Y变化的解释程度),越接近1越好
回归系数的Wald检验
下面的\beta即\omega
原假设:H_0:\beta=0(即X对Y无影响)
备择假设:H_{\alpha}:\beta\ne 0(即X对Y有影响)
统计检验量:t=\frac{\beta}{SE(\beta)}(t分布,自由度为n-2)
其中\beta的标准误为:SE(\beta)=\sqrt{\frac{\hat{\sigma}^2}{S_{XX}}}
方差的估计为:\hat{\sigma}^2=\frac{SSE}{n-2}
代入\beta=\frac{S_{XY}}{S_{XX}}可得t=\frac{S_{XY}}{\sqrt{\hat{\sigma}^2S_{XX}}}
多元线性回归
模型
也就是上面的更一般模型,为
::: align-center
f(\mathbf{x})=\mathbf{x\omega}
:::
其中
\omega=\begin{bmatrix}
\omega_1\\
\omega_2\\
\vdots\\
\omega_n\\
\omega_0
\end{bmatrix},\mathbf{x}=\begin{bmatrix}
\mathbf{x_1}^T & 1\\
\mathbf{x_2}^T & 1\\
\vdots & \vdots\\
\mathbf{x_n}^T & 1
\end{bmatrix}
注意此时我们的\mathbf{x}已经不再是一个向量,而是多个向量转置为行向量形成的矩阵
\mathbf{x}的最后全1偏置列用于保证获得\omega_0,即一元线性回归中的常数项b
策略
我们同样最小化MSE,此时需要将其写成内积
::: align-center
\begin{aligned}&\mathbf{\omega^*}=\arg\min(\mathbf{y-x\omega})^T(\mathbf{y-x\omega})\\
&E_w=(\mathbf{y-x\omega})^T(\mathbf{y-x\omega})
\end{aligned}
:::
通过矩阵微分得到\frac{\partial E_w}{\partial \mathbf{\omega}}=2\mathbf{x}^T(\mathbf{x}\omega-\mathbf{y})
算法
在上面微分中\mathbf{x}满秩的情况下可得到解析解,这里不多叙述,但在其不满秩时获得的解析解会有多个,且计算量非常大
- 针对计算量较大的问题:可用梯度下降法
- 针对多个解的问题,我们在这些解中进一步找出较优的,同时为对抗过拟合问题:可用正则化
梯度下降算法
首先我们回顾在多元函数中梯度\mathbf{grad}f=\nabla f(其中\nabla为Nabla算子)这个向量总是指向变化率最大的方向
若我们随机选取多元函数f(x)上的某一点,若它的梯度为某个向量,则我们按照梯度的反方向更新这个点,在我们更新步长得当的基础下我们最终就会达到局部最小值点的附近或到达最小值点
故我们可设此多元函数为J(\theta_1,\theta_2,\cdots,\theta_n),选取点(\theta_{p1},\theta_{p2},\cdots,\theta_{pn})则它的梯度为向量
::: align-center
\mathbf{grad}J=(\frac{\partial J}{\partial\theta_1},\frac{\partial J}{\theta_2},\cdots,\frac{\partial J}{\partial\theta_n})|_{(\theta_{p1},\theta_{p2},\cdots,\theta_{pn})}
:::
此向量的反方向即为变化率最大(但是是函数值减小方向)的方向,如此我们可以使用此向量的负向量的各个分量\times某个步长a来不断更新(\theta_{p1},\theta_{p2},\cdots,\theta_{pn}),经过有限次迭代后我们就会接近或到达局部最低点
::: align-center
\begin{aligned}
\widetilde{\theta_{p_i}}=\theta_{p_i}-a\frac{\partial J}{\partial \theta_i}
\end{aligned}
:::

这种可迭代方法对于计算机非常友好,但与此同时它又是有缺陷的,那就是在函数的凹凸性不能保证时,它到达的终究是局部最值点,用上图的例子,它只能保证到“坑”里,但它不能保证你到最深的“坑”里,如果在函数的凹凸性不能得到保证的前提下依然采用此方法,并想要到尽可能达全局最值点,可能需要考虑一些其他的方法,比如给点加一些轻微的扰动让其掉到其他可能更深的“坑”中。
此外迭代步长的选择也非常的重要,太小计算量太大,太大则我们不能保证最后和最值点足够接近,这里不再做过多叙述
正则化
正则化在第一篇文章已经提到,目前正则化的方法主要有两种
L2正则化(岭回归)
即在损失函数中加入\omega的L2范数,即
::: align-center
L_2=\lambda\sum_\omega\omega^2
:::
此时的算法就变成了在L约束下求最小值的问题
这里我们假设\omega为二维向量

用梯度下降法+岭回归求\omega时,在几何上即寻找彩色等值线与黑色圆的交点,注意到这个交点很难出现在坐标轴上,那么它就达到了\omega内部变量的相对平衡
但在数据维度较高,且线性关系稀疏时,使用岭回归就不太合适
L1正则化(Lasso回归)
在损失函数中加入\omega的L1范数
::: align-center
L_1=\lambda\sum_\omega|\omega|
:::
它和L2正则化的区别在于罚项的不同,这种正则化可以使得一些特征的系数变小,甚至使一些绝对值较小的系数直接变为0,从而增强模型的泛化能力,对于高维且线性关系稀疏的数据L1正则化表现更好
ElaticNet回归
L1回归优点也是它的缺点:它会将一些特征稀疏为0
此方法综合了L1和L2回归,在两种回归效果均不好时可使用此方法
此方法的公式为
::: align-center
\min(\frac{1}{2m}[\sum_{i=1}^m(y_i'-y_i)^2+L_1]+L_2)
:::
对数回归
读到此时读者应该已经发现我们的问题都在针对回归问题,粗略说即给定一个数据,输出预测数据,但如果我们想要进行分类操作呢?
::: align-center
也就是说我们给定数据,输出的不再是预测数据,而是一个类别
:::
对于线性回归,这就需要我们建立线性预测数据与“类别”之间的关系,对数回归问题考虑的就是最简单的二分类问题
我们考虑将数据最终分为两类“1”和“0”,如果出现了“0.5”则可将其分为两类中的任一类,如此我们便可以建立预测值z与“类”y之间的关系
::: align-center
y=\left\{ \begin{matrix}
0 & z<0\\
0.5 & z=0\\
1 & z>0
\end{matrix}\right .
:::

一种建模是y=\frac{1}{1+e^{-z}},我们管它叫做“对数几率函数”,它是一种“Sigmoid函数”,即把预测值转化为一个接近0或1的值,并在z=0附近变化很陡
对其取反函数我们便得到了
::: align-center
\ln(\frac{y}{1-y})=z
:::
若将y视为样本z作为正例的可能性,则1-y为其反例的可能性,二者的比值称作几率(odds),而对几率取对数则会得到对数几率(log odds,也称logit)
广义线性模型 GLM
阅读完上面的内容后,想必读者已经意识到我们的线性回归问题可以转化为其他问题,只要我们可以找到线性回归问题和我们问题之间的关系,基于此,广义线性模型应运而生,而刚才的logit函数,在广义线性模型框架下属于链接函数(Linking Function) 的一种
我们不再多介绍GLM的具体框架内容,只简单的给大家一些链接函数
| 链接函数 | 公式 | 适用 | 示例模型 |
|---|---|---|---|
| 恒等链接 | g(\mu)=\mu | 连续型数据(如正态分布) | 线性回归 |
| Logit链接 | g(\mu)=\ln\frac{\mu}{1-\mu} | 二分类问题 | 逻辑斯蒂回归 |
| Log链接 | g(\mu)=\ln(\mu) | 计数问题(泊松分布)或生存时间(Gamma分布) | 泊松回归、Cox回归 |
| 逆链接 | g(\mu)=\frac{1}{\mu} | 正数连续数据(Gamma分布) | Gamma回归 |
简单练习

解:
(1)略
(2)这是一个一元线性回归问题,设方程为
::: align-center
y=\omega x+b
:::
当最小化均方误差时,我们的参数可由解析方法求得为:
::: align-center
\begin{aligned}
&\omega=\frac{\sum_{i=i}^{m}y_i(x_i-\overline{x})}{\sum_{i=1}^{m}x_i^2-\frac{1}{m}(\sum_{i=1}^mx_i)^2}\\
&b=\frac{1}{m}\sum_{i=1}^m(y_i-\omega x_i)
\end{aligned}
:::
带入数据得\omega=0.7,b=0.35
故y关于x的线性回归方程为
::: align-center
y=0.7x+0.35
:::
(3)
带入x=100到(2)中的方程,得y=70.35吨,则节省100-70.35=19.65吨煤
全部评论 (0)
暂无评论,快来抢沙发吧~