(P1笔记)Regression回归——机器学习:李宏毅

Regression回归

  • 他是上一节中的scenario场景中的一个 task任务:Regression回归

  • Regression:output a scalar 回归:输出是一个数值量

  • 上节课说机器学习就是为了找到一个function,那回归要做的事情就是我们要找的那个functionoutput是一个数值也就是说我们要找的function的output是一个数值就是我们的回归Regression

  • Regression的几个例子:1.股票预测,就要用到Regression这个技术,他的function的Input是往年股票的一些数据或咨询之类的,output输出是哪家股票上涨的一个数值。2.无人车:也是找function,只不过他很复杂,他的input是一些sensor数据,距离之类的数据,output就是方向盘的角度之类的,也是数值。3.可购买性计算

在这里插入图片描述

在这里插入图片描述

  • 应用举例:培养宝可梦的CP战斗力值

    • 找一个function,他的input就是进化前的宝可梦的,output就是进化后的CP值

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    • 根据我们之前说的机器学习的步骤分三步

      • 1.Model(找一个模型)

        • 也就是找一组function set
        • 我们需要的这些function他的input就是某一只宝可梦记作x,output就是进化后的CP值记作y
        • 我们自己定义的Model是:y=b+w*xcp,作为function的输出计算公式(w和b是模型的参数)
          在这里插入图片描述
        • y1,y2,y3我们都假设好了,但我们知道y3是不合理的,我们让机器自己挑出哪些是合理的哪些是不合理的,挑出最好的function
        • 由公式得出线性模型(Linear model)如下图
          在这里插入图片描述
      • 2.Goodness of Function 衡量function的好坏,获得最好的function。需要确定一个衡量标准,也就是我们通常说的损失函数(Loss Function),损失函数的确定也需要依据具体问题而定如回归问题一般采用欧式距离,分类问题一般采用交叉熵代价函数。那我们现在有了一个model之后,接下来就进行第二个步骤,建立一个Loss function,这个Loss function就是用来衡量function的好坏,他的input就是Model中的function,output就是这个function的好坏程度。

        • 现在假设实际进化后的CP值是y,用y与function所预测的进化后的cp值做差,看这个差的平方有多大,而这个差值就衡量了这个function的好坏程度。

          现在Model中的function的参数都是w和b,所以我们也可以写成w和b的形式。如下图

        在这里插入图片描述

        在我们的Training Data看到的结果如下图,图中的每一个点就是一个function,颜色代表着Loss function的值,红色代表说非常大,蓝色代表非常小,所以说w的值如果为负的,那是不合理的,他的Loss function的值是非常大的。实际上假设说Loss function的最小值在图中画插的地方,所以我们下一步就是要把打插的function找出来,就是最好的function。但现在的function里有两个参数(x轴和y轴的b和w),我们虽然可以说穷举所有值把打插的点的值找出来,但是实际参数会有很多个情况,所以无法用穷举的方法,我们只能用更有效率的方法。
        在这里插入图片描述

        • 3.**Gradient Descent梯度下降让机器有一个好的演算法,挑出最好的function。**接下来有了这些Training Data以后,我们就可以来衡量这个Function有多好有多不好。根据自己定义的公式来进行衡量(Goodness of Function),根据Loss Function误差函数的公式,然后通过公式解算就选择最好的Funchtion,这个公式可以通过线性代数解出来。

          在这里插入图片描述

          • 求解Loss Function L得出来的公式可以通过Gradient Descent梯度下降进行求解,这个Gradient Descent方法可以用在各种不同的task上面,我们只要定义出这个Loss Function L出来,不管model是什么样的,只要对输入的参数w和b是可微分的,那我们就可以用Gradient Descent

            • **假设一个误差函数loss function L(w),他的参数只有一个w,所以现在要求解的问题就是找出一个w,让这个loss function最小。画出他的变化曲线图,由图可看出,L(w)的最小值所对应的的w的值,这样就找到了w和L(w)的最小值。如果要用更有效率的方法,可以用Gradient Descent(梯度下降)的方法。Gradient Descent的做法就是首先随机找一个初始值w0,然后就让L(w)不断对w在w=w0的位置进行求导,对应之前的激光SLAM课程中的梯度优化,其实就是不断往下进行求导,每次求导得到的是该曲线的斜切线,然后我们就可以通过这个斜切线的斜率来判定该点是否为曲线的L(w)的最小值,他的求导方向取决于求导后的正负值,如果求导后值为负,那么就往w的正方向进行求导,反正往负方向进行求导。然后反复求导得到最小值(微分为0时)。但有一个问题就是我们不一定可以求到最小的那个点,比如下图,local optimal不是最小点,但他却无法再进行求导。这个主要看人品,看我们求导的方向。**η是一个我们手动设上去的值,叫learing rate,学习频率,决定了学习的速度快慢。

              在这里插入图片描述

            • 假设一个loss function L(w,b),他有两个参数w和b,随即选一个w0和b0,通过L(w,b)对w和b在w=w0和b=b0时的偏导,再求差就得到了w1和b1在这里插入图片描述

              然后再在w=w1和b=b1时L(w,b)对w和b的偏导,然后再求差就得到了b2和w2,然后反复下去。比较简洁的写法就是将两个值排成一个向量,用▽L表示,▽就是对所有不同参数的偏导形成的一个向量。

              在这里插入图片描述

              如下图,图上的每个点就是loss function的一个数值。假设随意选定一个点(红点),然后在这个点对两个参数w和b求偏导所形成的的一个向量,乘以他的学习频率他是会指向里方向的。然后求完偏导后就会到达往内的某点,然后如此迭代求偏导,直到求偏导的值为0,就无法继续求偏导了,也就找到了最小值。

              在这里插入图片描述

            • 假设θ是一个参数的集合,也就是说Loss function的参数是一个集合,是一堆参数。那我们从θ0开始求偏导直到L(θ)最小,我们期待每次对θ求导之后,误差会越来越小,但是并不是这样,他会出现许多其他问题,比如上面说的gloabal optiaml(求导方向不同),还有一种可能就是saddle point(求导微分为0,但不是极值),还有一种可能是对曲线求导后斜率非常小,切线很平,我们会误认为他离极值点很近,线性回归可能不需要担心这个问题。

              在这里插入图片描述

            • 那么接下来的问题就是计算L对w的偏导和对b的偏导

              在这里插入图片描述

          • 接下来就看一下实际的结果

            此时我们定义的function是y=b+w*xcp,我们测试过当b=-188.4,w=2.7时,误差loss最小,是最好的function

            我们可以在给定好的Training Data训练数据中,算一下他的误差error有多大。每一个点(也就是每一个宝可梦进化后的CP值)与最好的function形成的斜线的差距都算出来,再平均起来算一下,得到结果是31.9。

            在这里插入图片描述

            但我们实际中并不是拿训练数据(就是拿已经抓到的宝可梦并已经训练过的,且得到训练后的CP值的)来进行的,真正在意的是这个所谓最好的function对我们没有抓过的宝可梦的进化后CP值的预测能力是怎样的。所以我们需要抓另外十只宝可梦,而这十只宝可梦我们不去进化他,所以他们的进化后的CP值我们也不知道,但我们希望通过这个所谓的最好的function来对这十只宝可梦的进化后的CP值进行预测。但我们并不知道这个十只宝可梦抓到后用这个最好的function预测出来的结果是否正确所以我们还是要对这十只宝可梦进化得到Testing Data,然后再在比对说现在实际上进化的结果和机器预测出来的结果差别有多大。现在我们假设抓了十只宝可梦,然后对其进化得到Testing Data,然后再根据这个Testing Data与给定的Model中的最好的function的斜线的误差error取平均得到值为35,Testing Data与最好的function的error误差是略大于Training Data与最好的function的error误差的。

            在这里插入图片描述

            机器学习的三个步骤再次总结:

            1.找一个Model

            2.loss function误差函数

            3.Gradient Descent(梯度下降)求这个误差函数的最小值

            检查一下我们的Model,在上面的例子中,我们得出的Loss function是线性Model,是一个直线的关系(进化前和进化后的CP值),但在实际中,他可能不是一个直线的关系,也许是更复杂的关系。比如Xcp的二次项和y也是有关系的。

        • Model的选择

          比如Model中的Xcp的二次项和y可能也有关系,y=b+w1*xcp+w2 *(xcp)²

          那么假设他最好的function的解为b=-10.3,w1=1.0,w2=2.7* 10-3

          他的最好的function的二次曲线画出来如下图,算出来他与最好的function的error误差是15.4,而把这个Model用在Testing Data中,他与最好的function的误差也在图中,误差为18.4。我们发现他也是挺好的。

          在这里插入图片描述

          那如果是跟三次曲线有关呢?

          他的Model就变成了y=b+w1* xcp +w2* (xcp)²+w3* (xcp)³,那么他最好的function解为b=6.4,w1=0.66,w2=4.3* 10-3,w3=-1.8* 10-6,那么最好的function的三次曲线画出来如下图,他与最好的function的误差是15.3,而把这个Model用在Testing Data中,用同样一条曲线他与最好的function的误差也在图中,误差为18.1。

          在这里插入图片描述

          跟二次曲线的误差比起来相比要好点。那么如果是四次曲线呢?

          假设Model是四次曲线,如下图。

          在这里插入图片描述

          我们发现换成四次的Model的时候,Training Data与最好的function的误差是越来越小了,但Testing Data却大了很多。

          再进行假设Model的y是和xcp的五次方有关系,那么如下图所示。我们发现Training Data与最好的function的误差更小了,但Testing Data却更大。

          在这里插入图片描述

        • 为什么会这样呢?

          其实越简单的Model是越复杂的Model的子集合。

          我们测试了五个不同的Model,得出结果发现越复杂的Model在训练数据TrainingData中他的误差函数就越小。

        在这里插入图片描述

        但同时,越复杂的Model虽然在Training Data中的误差函数最小,但是在Testing Data中中却是最大的。所以得出结论,一个负载的Model可以在Training Data中给我们一个好的performance性能,但是不一定会在Testting Data中给我们一个好的performance性能。这件事情就叫做Overfitting过度拟合,他虽然在Training Data中不是最好的,但是在Testing Data中却是最好的。

        在这里插入图片描述

        这就好比考驾照,在驾校练习的时候是Training,实际上路是Testing,在驾校的时候,看到的路都是一样,反复的练习自然就是好的,但实际上路却是不理想的。这就是Overfitting。

      • 那么怎么解决Overfitting的问题呢?

        只有通过得到更多的Data。

        刚才只有十只宝可梦作为Training Data,现在我们抓六十只宝可梦,他们进化前的CP值横坐标和进化后的CP值纵坐标,如图所示。

        在这里插入图片描述

        进化前的宝可梦CP值和进化后的CP值差太多,其实还有一个隐藏的因素影响了进化后的CP值。

        不同种类的宝可梦用不同颜色来表示。

        在这里插入图片描述

        其实上面做的都是瞎忙活,因为没有把宝可梦的种类考虑进来,不同的宝可梦进化前CP值和进化后CP值本来就是有很大区别的。所以我们需要重新设计Model。

    • 上面考虑的是同一种类的宝可梦的培养CP战斗力值,但如果有多个种类的呢?所以需要把种类也考虑进来。重新回到第一步。

      • 1.设计Model

        我们的function set应该把种类也考虑进来。

        xs代表宝可梦的种类,判断如果xs是Pidgey的话,那么我们就要用y=b1+w1*xcp这个function

        如果是宝可梦种类是weedle的话,y=b2+w2*xcp。…

        在这里插入图片描述

        他还是一个线性模型(Linear Model),用另外一种形式表示蓝色框的东西,如果xs=Pidgey,那么在这里插入图片描述

        所以有:

        在这里插入图片描述

        那我们就可以由这个Model得到四个function,画出四条直线(黄色和绿色重合)。

        那我们由这个新的Model对不同类型的宝可梦分开考虑后,在Training Data中得到的误差就是3.8,在Testing Data中得到的误差就是14.3。

        在这里插入图片描述

        但我们再考虑一下,如果还有其他可能会影响宝可梦进化前与进化后的CP值呢?比如他的重量weight、身高Height、HP值.。如下图可知,Height和Weight是几乎没有什么影响的,HP值有那么一点影响。

        在这里插入图片描述

        那么我们可以把这些可能影响的因素通通都加起来得到一个新的Model,他在Trining Data的误差是1.9,但他在Testing Data的误差却是102.3

        在这里插入图片描述

        很明显有些参数没用却影响到了Testing的误差。那哪些参数是没有用的呢?

        那么接下来就介绍一个在很多Testing Data中都有用的方法,这个方法就是Regularization。

      • 2.Regularization规则化

        他就是去改Loss function,之前的Loss function就是去预测Error误差有多大,那现在新的Loss function除了预测Error有多大之外,还多加了一项,λ乘以所有参数wi的平方和。找一个function,能让Loss function是最小的,他不止让error最小还让w是最小的(function是smooth平滑的,也就是输入发生变化时,输出的变化很小),这就是Regularization的目的(不仅要找一个error最小的function,而且还要找一个smoother的function)

        我们相信smoother平滑的function比较可能是正确的function,如果找出来的function抖动是非常厉害的话,如果我们加上这个Regularization(也就是λ乘以所有参数wi的平方和),就可以防止在Model选择function的时候从Model挑出抖动很厉害的function。λ是我们自己手动调节的,他的值影响着曲线的smoother平滑度。

        在这里插入图片描述

        然后我们来看一下Regularization所得到的的结果。λ为0时,也就是我们没有加Regularization的时候的值,当我们加上λ并且调试的时候发现Testing会越来越好,这个λ是我们自己调的。这个λ越来越大时我们的Training Data的误差会越来越大,因为我们本身没进行Regularization规则化时就是最好的情况,现在又要考虑一些东西自然会出现误差,但Testing Data误差会逐渐减少。

        在这里插入图片描述

        所以我们要做的就是选一个最好的λ来得到最好的结果。至于怎么选,在下节会讲。

  • 结论:

    宝可梦进化后的CP值是跟原来的CP值和种类是有关系的

    下节课讲Gradient Descent梯度下降的理论。

    在这里插入图片描述

    在这里插入图片描述

总结

  • function的output是一个数值**,**就是回归Regression

  • 应用举例:培养宝可梦的CP战斗力值

    • 根据机器学习的三个步骤
    • 1.Model(找一个模型):y=b+w*xcp
    • 2.衡量function的好坏(就是列出一个Loss function,它的值就是function的好坏程度)
    • 3.使用梯度下降的方法求解这个Loss function使其达到最小
  • 在第三步Gradient Descent求解Loss function时,我们还需要考虑到宝可梦的种类以及其他参数

    所以需要重新确定一个Model,然后对其进行Regularization规则化才会使得Testing Data可以达到预期的效果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值