机器学习(二)之 Regressionn

文章目录


在上一篇博客中,我们用 Regression 预测 PM2.5。其实,Regression 还有其他很多用处。

  • Stock Market Forecast(股票市场预测)

input 可能是过去十年各种股票起伏的资料,而我们希望 output is Dow Jones Industrial Average at tomorrow。
在这里插入图片描述

  • Self-driving Car(自动驾驶)

input 就是无人车所看到的以及它的红外线所感知的,output 就是方向盘的角度
在这里插入图片描述

  • Recommendation(推荐系统)

input 就是某个使用者 A和商品 B,output 就是使用者 A 购买商品 B 的可能性
在这里插入图片描述

下面,我们来看一个更有趣的例子。Estimating the Combat Power(CP)of a pokemon after evolution(预测神奇宝贝进化后的CP值)。这也可以转化成 Regression 的问题。

那么,我们需要找一个 function,这个 function 的 input 就是某一只 pokemon 的全部信息,output 就是这只 pokemon 进化后的 CP 值(是一个 scalar 数值)。

比如,我们将一只 pokemon 记作 x,它的 CP 值用 Xcp 来表示,Xs 表示它属于哪一个物种,Xhp 表示它的生命值,Xw 表示它的重量,Xh 表示它的高度。用 y 来代替进化后的 CP 值。
在这里插入图片描述
那么我们怎么解这个问题呢?接下来就有 3 个步骤。

  • Step 1:Model

我们需要需要找一个 function set,这个 function set 就是 Model。
在这里插入图片描述

而这个 function set 应该是什么样的呢?
比如,我们随便举一个例子:y = b + w * Xcp(y 为进化后的 CP 值,Xcp 为进化之前的 CP 值,b,w 为参数,可以是任何数值)
在这里插入图片描述
因为 b 和 w 可以是任意值,意味着这个 function set 可以有无穷个 function。但是里面有些 function 可能一眼就看出是错误的,比如 f3,它的计算结果为负。

y = b + w * Xcp 这样的 model ,它是一种 Linear model。如果一个 model 可以写成以下式子,我们就称之为 Linear model。
在这里插入图片描述

xi:an attribute of input x(生命值,身高,体重等属性),我们叫做 feature
wi:weight
b:bias(斜率)

  • Step 2:Goodness of Function

接下来我们就要收集 Training Data,我们收集的就是 function 的 input 和 output。


比如,以下例子中,我们输入一个杰尼龟,记作 x1(1为上标),我们规定用上标表示一个完整的 object,用下标表示一个 attribute。我们用 y1(1为上标)。虽然这里的 y1 是一个数值,但是之后的 learning 中会涉及到 components,所以这里统一用上标表示。
在这里插入图片描述
只有一只显然不够,我们需要收集很多。比如下面收集了 10 只,我们将这 10 只进化后的 CP 值用图像来表示如下。x轴表示神奇宝贝的进化前的 CP 值,y 轴表示进化后的 CP 值。
在这里插入图片描述
有了这些 Training Data 之后,我们就可以定义一个 function 的好坏。 那么怎么怎么做呢?我们要定义另一个 function:Loss function(记作 L),Loss function input is a function and output is how bad it is。可以记作 L(f) = L(w, b)
在这里插入图片描述
如果上述的 L 不是很直观,我们可以作图来表示。图中的每一个点表示一个 function,这个 color 代表 L(w, b),颜色越接近红色表示数值越大,即表示 Loss 很大,这些 function 是比较差的。越好的 function 越接近蓝色。
在这里插入图片描述

  • Step 3:Best Function

现在,我们要做的就是从 function set 里面挑选一个最好的 function。就是要找一个 Loss 最小的 function,记作
在这里插入图片描述
我们可以使用 Gradient Descent 来计算。

  • Consider loss function L(w) with one parameter w:就是要找一个 w 使得 L(w) 最小
    在这里插入图片描述
    这怎么计算呢?最暴力的方法就是穷举所有的 w,然后计算出它的 L(w)。
    在这里插入图片描述
    但是,我们都知道穷举法是最没有效率的,所以我们可以采用 Gradient Descent。

下面列举的是只有一个参数的情况。
在这里插入图片描述假设现在求出斜率为负,那么我们需要增加w,那么我们应该增加多少呢?
在这里插入图片描述
在得出了 w1 之后,重复上面的步骤,算出在 w1 处的微分。
在这里插入图片描述
经过很多次的迭代之后,会到达一个 Local optimal(局部最优)的地方,即微分是 0。但是这会有一个问题,比如当到达了 Local optimal 时,它就不会再移动了。但是这个局部最优有可能不是全局最优。幸运的是,这个问题在 Regression 中不是一个问题,在 Linear Regression 中是不存在 Local optimal 的。

上面说明了只有一个参数的情况,那么如果存在两个参数呢?其实与一个参数没有什么不同。第一步还是随机选取两个初始值(w0,b0)。然后再计算在 w=w0,b=b0时,分别计算w 对 Loss的偏微分,b 对 Loss 的偏微分。
在这里插入图片描述
需要补充说明的是 Gradient Descent 中的 gradient 指的是什么呢?
在这里插入图片描述
然后我们将其在坐标轴上展示出来。x 轴代表 b,y 轴代表 w。每一个 w 和 b 代表一个 function。依然还是越接近蓝色 Loss 越小。

在这里插入图片描述
接下来就是怎么求解的问题?
在这里插入图片描述
那么,按照上面的公式,最后的结果是什么呢?

假设 b = -188.4,w = 2.7,将其带入 y = b + w * Xcp。将其在坐标轴上表示如下:
在这里插入图片描述
然后可以计算出 Average Error on Training Data(即每个点距离红线之间的距离)。
在这里插入图片描述
在这里插入图片描述
但是这个数值并不是我们真正关心的,我们关心的是 Generalization。What we really care about is the error on data(testing data)。所以我们另外抓了 10 只 Pokemon,作为测试数据。这10只和之前做训练的10只是不同的。

在这里插入图片描述
然后计算一下。可以看出,这个值比之前用 Training Data 计算出来的值还要大。
在这里插入图片描述
那么,有没有什么办法可以做得更好呢?那就是重新去设计一下你的 Model。有可能你的 Model 不止是一条直线那么简单,有可能是更复杂的情况,比如是一个二次式。
在这里插入图片描述
我们也按照上面的方法找出最好的 function,假设我们找出的最好的 function 为 w1 = 1.0,w2 = 2.7 * 0.001,然后我们将其在坐标轴上表示。
在这里插入图片描述
然后计算其 Average Error = 15.4,但是我们真正关心的是 Testing Data。我们同样将其在坐标轴上表示,计算其 Average Error = 18.4。
在这里插入图片描述
相比于之前的 Linear Model,在加入了平方之后,得到的相对更好一些,那么我们有没有可能得到更好的呢?那么我们就得考虑更加复杂的 Model。比如下列式子。
在这里插入图片描述
然后我们得到的 Best Function。它的各个参数如下。
在这里插入图片描述
然后相对应的曲线其实跟二次的没有太大区别。计算出的 Average Error = 15.3。
在这里插入图片描述
然后我们用 Testing Data 计算其 Average Error = 18.1
在这里插入图片描述
相比于之前二次得出的 18.4,只是略微好了一点。

我们继续考虑4次式。虽然用 Training Data 得到的是 14.9,但是其 Testing Data 其实是更糟糕的。
在这里插入图片描述
最后,我们再次测试一下5次式。得到的结果更加糟糕。
在这里插入图片描述

综上所述,我们一共测试了5种 Model,那么现在就涉及到一个 Model Selection 的问题。
在这里插入图片描述
然后我们相应做出 Testing Data。
在这里插入图片描述
我们可以看出,从一次式到五次式,Training Data 是在相应的下降,但是其 Testing Data 相差却很大。所以我们可以得出一个结论:A more complex model does not always lead to better performance on testing data. This is Overfitting(过拟合). 所以我们需要选择一个最适合的 model,比如在这个例子中,我们选择一个三次式,就比较合适。

由于我们在上面的例子中,只收集了 10 只 Pokemon,如果我们收集 60 只 Pokemon,表示在坐标轴上。如下图所示。
在这里插入图片描述
其实,我们这里有一些隐藏的因素在之前的例子中没有被考虑到。比如 Pokemon 的物种,然后我们把不同的物种用不同的颜色进行区别。
在这里插入图片描述
那么,我们就需要针对不同的物种设计不同的 Model,比如我们用 Xs 表示物种,那么回到第一步:Redesign the Model。
在这里插入图片描述
或许这样写感觉式子很多,其实我们可以将其合成一个式子。
在这里插入图片描述
当物种为 Pidgey 时,相应的参数可以设置如下:
在这里插入图片描述
之后,我们将其在坐标轴上表示
在这里插入图片描述
然后我们得到的 Average error 为 3.8。那么我们真正在意的是 Testing Data。它的 Average error 为 14.3
在这里插入图片描述
但是,除了物种这个隐藏因素,还有其他的隐藏因素?比如进化后的 CP 值与 weight、height 、HP 有关?那么就可以得到下面的式子。
在这里插入图片描述
这个式子得到的 Training Error = 1.9,而 Tseting Error = 102.3,很明显是 Overfitting!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值