前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线性回归的推导与优化

线性回归的推导与优化

作者头像
数据森麟
发布2020-12-18 09:36:10
1.2K0
发布2020-12-18 09:36:10
举报
文章被收录于专栏:数据森麟数据森麟

写在前面的的话

大家好,我是小一

这是大话系列的第7节算法,也是本系列的第15篇原创文章。

文章较长,建议先收藏再阅读。文末附线性回归的思维导图。

线性回归

学习线性回归之前必须先要了解什么是回归,了解回归之前我们先从分类算法说起。

前面我们介绍的算法都属于分类算法,分类顾名思义就是预测样本对应的应该是哪一类,比如决策树实战中预测泰坦尼克号的乘客生还还是遇难,比如knn实战中预测对应的书写数字应该属于哪一类(即哪一个数字)等等这些都属于分类算法

可以看到分类算法对应的目标变量都是类别型,而在回归算法中对应的目标变量都是连续型。

像下面这个图,就是一个回归问题的预测。再举个简单的例子,比如可以根据房屋的面积、户型、楼层等指标预测房屋的价格,这也是一个回归问题,因为我们最终预测的结果不是一个类别型变量,而是一个连续型变量。

在回归算法中,我们一般会遇到单变量回归和多变量回归,这个其实和一元方程、多元方程是一样的。

如果只有一个自变量,我们称之为一元回归,如果有两个及以上的自变量,我们称之为多元回归,就好比区分一元方程和多元方程一样。

单变量线性回归
相关概念介绍

一元一次方程 y=ax+b中,指的是未知数的个数(即x),指的是未知数的最大幂数(即x的几次方),那么回归也就是针对输入变量x和输出变量y之间的一个映射,单变量线性回归只有一个输入特征,而且它的拟合曲线呈线性分布

就和上面的图中的直线一样,就是我们针对样本点预测出的一条最优拟合曲线。

在单变量线性回归中,最终的拟合曲线可能是条笔直的直线,也可能是一个曲线,但是它一定是线性分布的。

预测函数

首先先来了解一下我们线性回归算法的目的:确定一条最优的拟合曲线。说的通俗易懂点,就是确定一个能够使预测结果最优的函数方程。

所以针对给定的数据集x和y,预测函数会根据输入特征x计算输出值h(x)。其中输入和输出的函数关系如下:

h_\theta(x) = \theta_0+\theta_1x

可以看到我们最终的目的是确定这样的一个预测函数,使得预测函数h计算出来的值与真实值y的整体误差最小。

为了达到这个目的,我们需要找到合适的

\theta_0,\theta_1

的值,而这个

\theta_0,\theta_1

称之为单变量线性回归模型的模型参数。

损失函数

为了达到上面的目的,我们需要对整体的一个误差进行评估,求得在整体误差最小的情况下的

\theta_0,\theta_1

的值

我们在评估样本整体误差的时候,一般采用平方和计算整体的误差,所以我们的损失函数方程可以写成:

J(\theta) = J(\theta_0,\theta_1) = \frac{1}{2m}\sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2

其中,

h(x^{(i)})

表示预测的值,

y^{(i)}

表示实际值,上标i表示第i个样本,1/2是为了方便计算,后面你会遇到。

通过上面损失函数我们可以计算整体样本的误差情况,为了模型预测的能尽可能准确,我们当然是希望整体误差越小越好

再观察一下损失函数,如果我们能够找到最优的

\theta_0,\theta_1

,那么预测的结果

h(x^{(i)})

也就更接近实际值

y^{(i)}

,样本的整体误差

J(\theta)

也就最小。

所以问题又回到了找到合适的

\theta_0,\theta_1

的值

ok,在解决这个问题的时候,梯度下降算法就派上用场了。

梯度下降算法

首先在一个三维空间中,以

\theta_0

作为x轴,以

\theta_1

作为y轴,以损失函数

J(\theta_0,\theta_1)

作为z轴,那我们的目的就是在找到z轴最小值的同时确定其所对应的x轴上的值

\theta_0

和y轴上的值

\theta_1

梯度算法的原理是,先随机选择一组

\theta_0,\theta_1

,同时选择一个参数α作为移动的步幅。然后,让x轴上的

\theta_0

分别向特定的方向移动一小步,这个步幅的大小由参数α决定。经过多次迭代之后,x轴和y轴上的值决定的点就慢慢的靠近z轴上的最小处。

上面这个图是从正上方视角去看刚才的那个三维空间。

我们随机选择的点在x0处,经过多次迭代之后,慢慢的靠近圆心处,也就是z轴上最小值附近。

这里面有一个核心问题需要注意,在x0处为什么会走向图中的x1处,为什么不是另一个方向呢?换个说法就是在x0处如何确定移动的方向?

想必你可能还记得一丢丢梯度的概念,ok,这一丢丢就够了

梯度就是在一个点处沿着该方向(梯度的方向)变化最快,那我们沿着梯度方向岂不是可以使得损失函数

J(\theta_0,\theta_1)

增加的最少?

整理一下梯度的思路:我们要让

\theta_j

不停地迭代,由当前

\theta_j

的值,根据

J(\theta)

的偏导数函数,计算

J(\theta)

\theta_j

上的斜率,然后再乘以学习率α,就可以让

\theta_j

J(\theta)

的方向迈一小步。

根据梯度下降公式:

\theta_j = \theta_j-\alpha \frac{\partial}{\partial\theta_j}J(\theta)

我们可以确定

\theta_0,\theta_1

的更新过程:

\theta_0 = \theta_0-\frac{\alpha}{m}\sum_{i=1}^m(h(x^{(i)})-y^{(i)})
\theta_1 = \theta_1-\frac{\alpha}{m}\sum_{i=1}^m((h(x^{(i)})-y^{(i)})x_i)

其中,α是学习率(也就是每一步的步长),m是训练样本的个数,针对上面这个公式,我们可以在每一步去更新

\theta_0,\theta_1

的值,这样我们最终确定的

\theta_0,\theta_1

就是当前样本集的最优模型参数。

多变量线性回归
相关概念介绍

上面我们所说的线性回归是只有一个输入特征,但是在实际中并不全是单输入特征的场景,相比之下,多变量输入特征的案例会更多些。也就是这节的多变量线性回归

预测函数

此时多变量线性回归输出的y值由输入特征

x_1,x_2,x_3,...,x_n

共同决定,对应的此时的预测函数模型可以写成:

h_\theta(x) = \theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n

x_0

为常数1,则此时的预测函数可以写成:

h_\theta(x) = \sum_{j=0}^n\theta_jx_j

根据向量乘法运算原则,预测函数也可以写成如下的形式:

h_\theta(x) = [\theta_0 \ \theta_1 \ ... \ \theta_n] \begin{bmatrix}x_0\\x_1\\...\\x_n \end{bmatrix}=\theta^Tx

写成向量形式的预测函数不但因为简洁,还可以在实现算法时通过Numpy的矩阵运算来提高效率

损失函数

同理此时的损失函数可以写成:

J(\theta) = \frac{1}{2m}\sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2

和单变量线性回归的形式相同,此时多变量线性回归的损失函数的矩阵形式可以写成:

J(\theta) = \frac{1}{2m}(X\theta-Y)^T(X\theta-Y)

X为m×(x+1)维的训练样本矩阵,Y表示由所有的训练样本的输出

y^(i)

构成的向量。

同样的道理,此时我们也可以通过梯度下降法计算损失函数来确定最优的参数θ,注意此时的θ表示的列向量

梯度下降法

根据单变量梯度下降公式:

\theta_j = \theta_j-\alpha \frac{\partial}{\partial\theta_j}J(\theta)

我们可以得到此时的梯度下降法参数更新公式:

\theta_j = \theta_j-\frac{\alpha}{m}\sum_{i=1}^m((h(x^{(i)})-y^{(i)})x_j^{(i)})

根据这个公式,我们在进行编码的时候可以按照这个顺序:

  • 确定学习率α α太大意味着会直接跨过目的地,使得损失函数无法收敛;太小则意味着需要很多次才能达到目的地,会迭代较多次数,算法的效率较低。
  • 确定参数起始点 比如我们可以让所有的参数都以1作为起点,即
\theta_0=1,\theta_1=1,...,\theta_n=1

。这样就可以通过预测值和成本函数计算在参数起始位置的成本。一般情况下可以选择极点附近作为起始点,或者根据实际情况灵活选择。

  • 计算参数的下一组值 根据梯度下降的参数迭代公式,分别同时计算出新的θ的值,然后使用新的θ的值得到新的西预测函数,根据新的预测函数,代入成本函数算出新的成本。
  • 确认成本函数是否收敛 通过比较新的成本和旧的成本看成本是不是变得越来越小。如果两次的差异小于误差范围,就可以近似认为已经找到了最小成本。如果大于,则需要重复计算参数θ,直到找到最优解。
模型优化
介绍

在线性回归的预测中,很容易出现两个问题:过拟合和欠拟合。

如果模型在训练集上学的过好,模型就会记住训练样本的细节,导致模型在测试集的泛化效果较差,这种现象称为过拟合(Overfitting)。与过拟合相对应的是欠拟合(Underfitting),即模型在训练集上的拟合效果较差。

针对欠拟合我们可以增加特征的维度、使用较少的训练样本等方式来进行模型优化;针对过拟合我们可以增加惩罚项、减少特征输入个数、使用更多的训练样本等来进行模型优化。

线性回归欠拟合

当线性回归模型欠拟合时我们通常使用增加特征维度来进行优化,例如我们可以通过增加特征多项式来让模型更好的拟合数据。

比如有两个特征x1、x2,我们可以增加两个特征的乘积x1x2作为新特征x3,或者增加

x_1^2

作为新特征x3等等,通过增加特征维度的方法让模型更好的拟合样本数据。

线性回归过拟合

当线性回归模型过拟合时我们通常使用正则化的方法来进行优化,此时我们主要是对损失函数进行优化:

J(\theta) = \frac{1}{2m}\sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2+\lambda\sum_{j=1}^n \theta_j^2

前半部分是我们在线性回归模型中的损失函数,也就是预测值和实际值的误差。后半部分是加入的正则项,其中λ既可以维持对训练样本的拟合,又可以避免对训练样本的过拟合。

从数学角度分析,损失函数增加了一个正则项后,损失函数不再唯一的由预测值和真实值的误差所决定,还会和参数θ的大小有关。

比如某个比较大的θ的值会让

(h(x^{(i)})-y^{(i)})^2

的值很小,但会导致

\theta_j^2

很大,最终的结果是成本函数太大,此时可以通过调整参数λ,通过控制正则项的权重,从而避免线性回归算法的过拟合。

利用正则化的成本函数,可以推导出正则化后的参数迭代函数:

\theta_j = \theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum_{i=1}^m((h(x^{(i)})-y^{(i)})x_j^{(i)})

可以看到α和λ都是正数,而m是训练样例的个数,所有因子

1-\alpha\frac{\lambda}{m}

会在每次迭代的时候把

\theta_j

收缩一点点。如果从损失函数的公式中来看,因为

J(\theta)

\theta_j^2

成正比,所以迭代时不断减少θ的值可以让损失函数尽可能的小。

数据归一化

在线性回归模型中,还有一点需要特别注意,那就是是数据归一化,特别是当我们通过多项式的方式添加特征的时候,特征的分布很不一致。

例如x1的范围是[1,10]之间,而特征x2的范围是[1,10000]之间,这个时候就需要进行数据归一化,在进行特征归一化之后,可以使得样本的特征分布都在[0,1]之间。

通过对数据归一化之后可以使算法收敛的更快,提升模型拟合的计算效率。但是在对模型预测的过程中,预测的结果需要乘以归一化处理的系数。

模型优缺点

优点:

  • 思想简单,实现容易。对于小数据量、简单的关系建模迅速有效;
  • 是许多强大的非线性模型的基础。
  • 容易理解,结果具有很好的可解释性,有利于决策分析。
  • 能解决回归问题。

缺点:

  • 对于非线性数据或者数据特征间具有相关性多项式回归难以建模.
  • 难以很好地表达高度复杂的数据。
思维导图
写在后面的话

稍稍总结一下,回归模型的目的是预测数值型的目标值,像诸如房价预测,年龄预测等等都可以通过回归模型去解决。

当然了你要说分类模型可以解决吗?也可以的。只不过各有所长,各有所短,而且针对样本特征需要进行相应的处理。

代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据森麟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线性回归
  • 单变量线性回归
    • 相关概念介绍
      • 预测函数
        • 损失函数
          • 梯度下降算法
          • 多变量线性回归
            • 相关概念介绍
              • 预测函数
                • 损失函数
                  • 梯度下降法
                  • 模型优化
                    • 介绍
                      • 线性回归欠拟合
                        • 线性回归过拟合
                          • 数据归一化
                          • 模型优缺点
                          • 思维导图
                          • 写在后面的话
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档