李宏毅机器学习特训营——regression课程笔记

回归应用

  概括来说,回归的过程就是向某一函数f(X)输入若干数据X,输出某一标量。回归可用于股票预测、自动驾驶、推荐系统等,如下图所示:
在这里插入图片描述

  接下来,我们将用大名鼎鼎的宝可梦预测实例梳理回归模型构建的全流程,或者说如何玩转机器学习?
  注:我对Pokémon不是很了解,因此,我可能直接用字母代替里面的很多细节,比如特征值的含义。

回归举例:宝可梦预测

实例说明

  要求预测宝可梦进化后的CP值。这里我们可以向模型输入不同的特征,包括但不限于 x s x_s xs x h p x_{hp} xhp x w x_w xw x h x_h xh x c p x_{cp} xcp(进化前的CP值)。
在这里插入图片描述

step1.Model(模型选择)

  模型中包含许多function,例如 f 1 , f 2 , . . . f_1,f_2,... f1,f2,...。这里我们可以初步设定一个表示输入输出的映射关系:
y = b + w ⋅ x c p y = b + w · x_{cp} y=b+wxcp
此时,我们仅仅取 x c p x_{cp} xcp作为模型的输入特征。
在这里插入图片描述
  实际上,上述公式就是我们最基本的回归模型——线性回归。个人认为它只是形似一元线性函数,并不是我们所熟知的那个一元函数,又或者说它是一组一元函数,也就是老师课上所讲的a set of function,所以在使用时不必拘泥于自变量和参数的个数。进一步扩展,显然单一特征 x c p x_{cp} xcp很难预测进化后的CP值,这样我们可以加入不同的特征集合,并辅以不同的权重比例,构建出一个相对完整的线性回归模型,如下图:
在这里插入图片描述
  这里的 w w w b b b是可以调整的参数,接下来我们将主要着眼于这两个参数的调整。其实道理很简单,输入特征值x是数据集给定的,模型输出值y是因变量,而数据集给定的真实输出值 y ^ \hat{y} y^也是常量,因此模型可调整的地方就只有 w w w b b b这两个参数了,除非换模型~
在这里插入图片描述

step2.goodness of function(模型调优)

  模型选定好后,我们如何优化模型以达到准确预测的目标呢?直觉告诉我们要调整 w w w b b b,但是如何调整呢?我们一定要清楚一点,那就是模型输出值 y y y和数据集给定的真实输出值 y ^ \hat{y} y^是截然不同的两个概念。
在这里插入图片描述
  下图取自宝可梦的训练集的十条数据,注意 y ^ i \hat{y}^i y^i是真实数据。
在这里插入图片描述

  换言之,我们希望模型输出值与数据集给定的真实输出值越接近越好,甚至于一模一样,那么毫无疑问,我们的模型会十分精准的预测未来的进化后cp值(当然,后面会告诉我们,这种情况很可能造成过拟合现象)。因此,我们可以构建一个函数,它可以衡量模型输出值 y y y和数据集给定的真实输出值 y ^ \hat{y} y^的相似程度,这就是loss函数。
在这里插入图片描述

  这里我们采用最基本的loss函数——MSE(均方误差)。顾名思义,真实值 - 预测值的平方求和。初步得到公式(只取一个特征值 x c p x_{cp} xcp):
L ( f ) = ∑ i = 1 n ( y ^ i − f ( x c p i ) ) 2 L(f) = \sum_{i=1}^{n}(\hat{y}^i - f(x_{cp}^i))^2 L(f)=i=1n(y^if(xcpi))2
预测值显然与模型相关联,那么进一步化简:
L ( w , b ) = ∑ i = 1 n ( y ^ i − ( b + w ⋅ x c p i ) ) 2 L(w,b) = \sum_{i=1}^{n}(\hat{y}^i - (b + w·x_{cp}^i))^2 L(w,b)=i=1n(y^i(b+wxcpi))2

继续以刚才的10条数据举例:
在这里插入图片描述
  现在我们要找到最佳的 w w w b b b使得loss函数最小(理想状态是0)。下图是loss函数值的分布图:
在这里插入图片描述

step3.best function(使用Gradient Descent优化loss函数)

  现在得到我们的优化等式:
f ∗ = a r g   min ⁡ f L ( f ) w ∗ , b ∗ = a r g   min ⁡ w , b L ( w , b ) = a r g   min ⁡ w , b ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ) 2 f^* = arg\, \min_{f} L(f) \\ w^*,b^*= arg\, \min_{w,b} L(w,b) = arg\, \min_{w,b} \sum_{n=1}^{10}(\hat{y}^n - (b + w·x_{cp}^n))^2 f=argfminL(f)w,b=argw,bminL(w,b)=argw,bminn=110(y^n(b+wxcpn))2
此时我们该如何优化它?搬出我们大名鼎鼎的Gradient Descent,又名梯度下降法。关于梯度可以看本人总结的另一篇——机器学习高等数学基础——多元微分总结。这里我们直接阐述优化过程。

Task1:只有一个参数w

  此时等式变为:
w ∗ = a r g   min ⁡ w L ( w ) w^* = arg\, \min_{w} L(w) w=argwminL(w)

  1. 随机选取初始点 w 0 w^0 w0

  2. 计算 d L d w ∣ w = w 0 \frac{\mathrm{d} L}{\mathrm{d} w} |_{w = w^0} dwdLw=w0
    在这里插入图片描述
    更新函数点:
    w 1 ←   w 0 − η d L d w ∣ w = w 0 w^1 \leftarrow \, w^0 - \eta \frac{\mathrm{d} L}{\mathrm{d} w} |_{w = w^0} w1w0ηdwdLw=w0
    在这里插入图片描述

  3. 计算 d L d w ∣ w = w 1 \frac{\mathrm{d} L}{\mathrm{d} w} |_{w = w^1} dwdLw=w1
    在这里插入图片描述
    更新函数点:
    w 2 ←   w 1 − η d L d w ∣ w = w 1 w^2 \leftarrow \, w^1 - \eta \frac{\mathrm{d} L}{\mathrm{d} w} |_{w = w^1} w2w1ηdwdLw=w1

  4. 以此类推,迭代。直到找到loss函数最小值处,算法结束。

Task2:有两个参数w和b
  1. 随机选取初始点 w 0 w^0 w0 b 0 b^0 b0
  2. 计算 ∂ L ∂ w ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial w}|_{w = w^0,b=b^0} wLw=w0,b=b0 ∂ L ∂ b ∣ w = w 0 , b = b 0 \frac{\partial L}{\partial b}|_{w = w^0,b=b^0} bLw=w0,b=b0
    更新函数点:
    w 1 ←   w 0 − η ∂ L ∂ w ∣ w = w 0 , b = b 0 b 1 ←   b 0 − η ∂ L ∂ b ∣ w = w 0 , b = b 0 w^1 \leftarrow \, w^0 - \eta \frac{\partial L}{\partial w}|_{w = w^0,b=b^0} \\ b^1 \leftarrow \, b^0 - \eta \frac{\partial L}{\partial b}|_{w = w^0,b=b^0} w1w0ηwLw=w0,b=b0b1b0ηbLw=w0,b=b0
  3. 以此类推,迭代。直到找到loss函数最小值处,算法结束。

在这里插入图片描述

总结

  梯度公式:
∇ L = [ ∂ L ∂ w ∂ L ∂ b ] \nabla L = \left[ \begin{matrix} \frac{\partial L}{\partial w} \\ \frac{\partial L}{\partial b}\end{matrix} \right] L=[wLbL]

  优化方向如图所示:
在这里插入图片描述
我们要清楚一点的是,使用梯度下降法迭代参数,并不代表loss函数值时刻递减。
在这里插入图片描述
此外,使用梯度下降法的loss函数在遇到鞍点或平稳变化的点时,下降速度会明显变慢。
在这里插入图片描述

results(分析结果)

  现在我们得到了best function(实际是良好的参数w和b),我们再通过模型输出得到的预测值数据集中的真实值做对比,如图所示:与
依然有误差存在,我们可以算出这组数据的平均误差。
  其实无论这个误差的大小,无论我们用何种方法试图降低该误差,我们都应该清楚,这是我们在训练集training data上得到的误差。而我们更关心的是该模型在新数据上的表现,也就是testing data。这就要求我们的模型要具有泛化能力——generalization。
  现在将testing data输入到我们的模型中来,我们发现得到的平均误差大于训练集获得的平均误差。
在这里插入图片描述
那么我们如何优化模型呢?

优化模型

model selection

  观察图像中分布点的情况,看起来它更像是一个二次函数的分布情况。
在这里插入图片描述
所以我们不妨将原模型变成二次函数。当然,我们可以变成三元等多元函数,这个要基于训练结果而定。
y = b + w 1 x c p + w 2 x c p 2 y = b + w_1x_{cp} + w_2x_{cp}^2 y=b+w1xcp+w2xcp2
得到在训练集和测试集的结果如图所示:
在这里插入图片描述
我们观察到效果有了明显的提升,那么是否意味着维度越高,我们的模型效果就越好。为了验证这一点,我们继续加维度。

  • 三元在这里插入图片描述
  • 四元
    在这里插入图片描述
  • 五元
    在这里插入图片描述

  当加到五元时,意外发生了,模型没有按照我们设想的那样在testing data上越变越好,而是出现了断崖式下降,这是我们最不想看到的。下图将training data上的平均误差做了一个总结:
在这里插入图片描述
总结如果我们过于追求在训练集上的效果,那么就有可能造成过拟合(overfitting)。这意味着我们要选择合适的模型,而不是一味追求复杂模型。通过对比,我们发现三元函数的model较为合适,如图:
在这里插入图片描述

collect more data(collect more feature)

  现在观察原cp–进化后cp的图像,我们发现点的分布有聚集的现象,简而言之,我们是否可以把图像的点分组?
在这里插入图片描述

  接下来我们换一种思路。截止到目前的实验,我们只考虑了进化前的cp值,也就是 x c p i x_{cp}^i xcpi。那么是否存在一些我们之前忽略的隐藏因素?比如,物种!现在让我们回到step one,重新设计model。
在这里插入图片描述

back to step1:redesign the model

  设物种为 x s x_s xs,在依旧采用线性回归模型的前提下,产生如下表达式:
在这里插入图片描述
进一步合并:
y = b 1 ⋅ δ ( x s =   ? ) + w 1 ⋅ δ ( x s =   ? ) x c p + b 2 ⋅ δ ( x s =   ? ) + w 2 ⋅ δ ( x s =   ? ) x c p + . . . + . . . y = b_1 ·\delta(x_s = \ ?) + w_1 · \delta(x_s = \ ?)x_{cp} \\ +b_2 ·\delta(x_s = \ ?) + w_2 · \delta(x_s = \ ?)x_{cp} \\ +... \\ +... y=b1δ(xs= ?)+w1δ(xs= ?)xcp+b2δ(xs= ?)+w2δ(xs= ?)xcp+...+...
其中, δ ( x s =   ? ) = { 1 , i f   x s =   ? 0 , o t h e r w i s e \delta(x_s = \ ?) = \begin{cases} 1,if \ x_s = \ ?\\ 0,otherwise \end{cases} δ(xs= ?)={1,if xs= ?0,otherwise

也就是说,现在的模型类似与选择函数,当出现哪个物种时,就选定哪一组w和b。举例说明,如图:
在这里插入图片描述
实验结果如图,效果有了明显的提升:
在这里插入图片描述

other hidden factor?

  这是很自然的想法,模型可能存在其他隐藏因素。比如,我们一开始的这张写满了宝可梦特征的卡片:
在这里插入图片描述
观察下图,我们发现单一特征产生的进化后cp值都存在坐标点扎堆出现的情况,那么可以推测这些特征也与隐藏因素物种有关。因此,我们可以融合一下~
在这里插入图片描述

  现在让我们再次回到step one,重新设计model。先规定模型变为二元函数,之后将物种选择函数设为 y ′ y^{\prime} y,作为一个项加入到模型中,最后对所有特征进行求和。详细步骤如图:

在这里插入图片描述
观察结果,我们发现出现过拟合现象!

back to step2:regularization(正则化)

  现在开始着眼于loss函数的修改,当然我们可以把MSE误差函数换成时下流行的交叉熵loss函数,不过这并不是我们今天讨论的重点。回到一开始的step2.goodness of function,loss函数的本意是帮助我们选择best的w和b,进而选择比较好的function。现在,我们可以在loss函数中加一点料,便于我们能更高效地找到best answer!
  原模型和原loss function如下图:
在这里插入图片描述
我们发现原来的loss函数只考虑了预测值的error,也就是真实值 - 预测值的平方。那么regularization就是加上一项额外的项,即 λ ∑ ( w i ) 2 \lambda \sum (w_i)^2 λ(wi)2,其中 λ \lambda λ是我们需要tuning的参数,公式如下图。由于loss函数越小越好,因此,当我们加上了这一项,就意味着我们要找到的best function的 w i w_i wi越小越好。为什么说 w i w_i wi越小,function越好呢?
在这里插入图片描述
因为参数 w i w_i wi越小,function越平滑(smooth)!什么是平滑?函数平滑意味着当输入有变化时,输出不敏感。假设模型如上图,现在输入有变化,比如某一个 x i x_i xi加上 Δ x i \Delta x_i Δxi,此时输出变化为 y i y_i yi加上 w i Δ x i w_i\Delta x_i wiΔxi。显然,如果 w i w_i wi越接近0,输出的变化就越小。
在这里插入图片描述
  那么为什么我们喜欢平滑的function?因为noisy input!如果在测试时,有噪音干扰了输入的 x i x_i xi,那么一个平滑的函数能够降低影响。调整 λ \lambda λ,实验结果如图。loss现在有两项,一项考虑error,一项考虑smooth。当 λ \lambda λ越大,代表考虑smooth的正则化项的影响力越大,即找到的function越平滑。
在这里插入图片描述
我们发现当 λ \lambda λ越大时候,训练集的error越大。这是正常的,因为 λ \lambda λ越大,我们倾向于考虑w本来的值,而减少考虑error。但很有趣的一点, λ \lambda λ越大,测试集上的error可能越小。这个结果合理,我们喜欢平滑的function,但不喜欢像水平线一样平滑的function。那么如何找到这个smooth?调整 λ \lambda λ

正则化项为什么不考虑b

  如题,为什么不考虑bias(b):
在这里插入图片描述
调整b的大小并不影响function的平滑程度,这就是很easy的初等数学,我们画一个一元函数图像 y = k x + b y = kx + b y=kx+b就容易发现b的大小只能影响function上下平移位置,跟functoin的平滑程度并没有关系。

conclusion

在这里插入图片描述

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值