初步感受Regression

Regression能够做哪些事情?

  • 股票行情预测(输出明天买哪只)
  • 自动驾驶(输出驾驶方向)
  • 推荐系统(给出可能性)

Regression案例分析(宝可梦研究)

抛出问题

我们期望根据已有的宝可梦进化前后的信息,来预测某只宝可梦进化后的cp值的大小
李宏毅2020机器学习课程笔记-Regression
X X X: 表示一只宝可梦,用下标表示该宝可梦的某种属性

X c p X_{cp} Xcp:表示该宝可梦进化前的cp值

X s X_s Xs: 表示该宝可梦是属于哪一种物种,比如妙瓜种子、皮卡丘…

X h p X_{hp} Xhp:表示该宝可梦的hp值即生命值是多少

X w X_w Xw: 代表该宝可梦的重重量

X h X_h Xh: 代表该宝可梦的高度

f ( ) f() f(): 表示我们要找的function

y y y: 表示function的output,即宝可梦进化后的cp值,是一个scalar

解决思路

  • 确定Senario、Task和Model

Senario
首先根据已有的data来确定Senario,我们拥有宝可梦进化前后cp值的这样一笔数据,input是进化前的宝可梦(包括它的各种属性),output是进化后的宝可梦的cp值;因此我们的data是labeled,使用的Senario是Supervised Learning

Task 然后根据我们想要function的输出类型来确定Task,我们预期得到的是宝可梦进化后的cp值,是一个scalar,因此使用的Task是Regression

Model 关于Model,选择很多,从简单的开始这里采用的是Llinear Model

ML 的步骤

  1. 定义一个model即function set
  2. 定义一个goodness of function损失函数去评估该function的好坏
  3. 找一个最好的function

Step1:Model (function set)

一般来说,是根据经验来的,我们从简单的开始,先随意定义一个模型。如下图所示,我们可以设定不同的参数w和b来得到一个函数集合,也就是我们的model。
李宏毅2020机器学习课程笔记-Regression

Step 2: Goodness of Function

为了选出唯一一个function,我们需要衡量一个function的好坏,称之为loss function之前提到的model是由我们自己决定的,这里的loss function也是,最常用的方法就是采用类似于方差和的形式来衡量参数的好坏,即预测值与真值差的平方和;这里真正的数值减估测数值的平方,叫做估测误差Estimation error,将10个估测误差合起来就是loss function
L ( f ) = L ( w , b ) = ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ) 2 L(f)=L(w,b)=\sum_{n=1}^{10}(\widehat{y}^n-(b+w \cdot {x}^n_{cp}))^2 L(f)=L(w,b)=n=110(y n(b+wxcpn))2
李宏毅2020机器学习课程笔记-Regression

Step3:Pick the Best Function

我们已经确定了loss function,他可以衡量我们model里面每一个function的好坏,接下来我们要做的事情就是,从这个function set里面,挑选一个最好的function
挑选最好的function这一件事情,写成formulation/equation的样子如下:
f ∗ = a r g m i n f L ( f ) f^*={arg} \underset{f}{min} L(f) f=argfminL(f)
w ∗ , b ∗ = a r g   m i n w , b L ( w , b ) = a r g   m i n w , b ∑ n = 1 10 ( y ^ n − ( b + w ⋅ x c p n ) ) 2 w^*,b^*={arg}\ \underset{w,b}{min} L(w,b)={arg}\ \underset{w,b}{min} \sum\limits^{10}_{n=1}(\widehat{y}^n-(b+w \cdot x^n_{cp}))^2 w,b=arg w,bminL(w,b)=arg w,bminn=110(y n(b+wxcpn))2
也就是那个使 L ( f ) = L ( w , b ) = L o s s L(f)=L(w,b)=Loss L(f)=L(w,b)=Loss最小的 f f f ( w , b ) (w,b) (w,b),就是我们要找的 f ∗ f^* f ( w ∗ , b ∗ ) (w^*,b^*) (w,b)(有点像极大似然估计的思想)
李宏毅2020机器学习课程笔记-Regression

我们采用Gradient Descent 来挑选出最好的function。
因为对于loss function的计算,我们穷举是不太现实的,而且非常的费精力。所以我们采用的梯度下降方法来更新我们的参数来找到是loss最小的那套参数。
Gradient Descent原理讲解,待写。(也可以直接看视频进行理解)

接下来对宝可梦的案例继续进行分析。
根据gradient descent,我们得到的 y = b + w ⋅ x c p y=b+w\cdot x_{cp} y=b+wxcp中最好的参数是b=-188.4, w=2.7

我们需要有一套评估系统来评价我们得到的最后这个function和实际值的误差error的大小;这里我们将training data里每一只宝可梦 i i i 进化后的实际cp值与预测值之差的绝对值叫做 e i e^i ei,而这些误差之和Average Error on Training Data为 ∑ i = 1 10 e i = 31.9 \sum\limits_{i=1}^{10}e^i=31.9 i=110ei=31.9
当然我们真正关心的是generalization的case,也就是用这个model去估测新抓到的pokemon,误差会有多少,这也就是所谓的testing data的误差;于是又抓了10只新的pokemon,算出来的Average Error on Testing Data为 ∑ i = 1 10 e i = 35.0 \sum\limits_{i=1}^{10}e^i=35.0 i=110ei=35.0;可见training data里得到的误差一般是要比testing data要小,这也符合常识。

我们想做的更好,我们从头开始决定新的模型,找到最好的函数,并用训练误差和测试误差来评估我们新产生的模型结果。
李老师再此基础上进行了多次试验并进行比对。
李宏毅2020机器学习课程笔记-Regression
李宏毅2020机器学习课程笔记-Regression

根据训练结果我们可以看到,随着模型越来越复杂,我们的训练误差变得越来越小。但在模型变为3元函数的时候,我们观察到测试误差呈上升趋势,这不是我们想要的。
当模型愈来越复杂,训练误差远远优于我们的测试误差时,我们就产生了过拟合的现象。
因此model不是越复杂越好,而是选择一个最适合的model,在本例中,包含 ( X c p ) 3 (X_{cp})^3 (Xcp)3的式子是最适合的model。
关于过拟合的理解:

我们在考驾照的时候,教练就会教我们一些小技巧,比如在倒车时,看到某个点就打半圈等,那么在我们实际生活中,这种小技巧就不灵了,你的驾驶技术也就不行了。

尝试讨论不同的参数

之前我们的model只考虑了宝可梦进化前的cp值,这显然是不对的,除了cp值外,还受到物种 x s x_s xs的影响。
我们再进行之前的工作,尝试得到好的模型与测试结果。

针对过拟合问题的解决方案-Regularization

李宏毅2020机器学习课程笔记-Regression

课程中,老师用L2正则化解决过拟合问题,正则化的作用是降低模型的泛化误差(测试误差)
λ是由我们自己进行设置的。
选择模型时,更倾向于选择“平滑”的模型。因为当数据有噪声干扰时,越平滑的函数受到噪声的干扰越小。
正则化解决拟合问题的原理(待写)

相关文章: