机器学习入门系列02,Regression 回归:案例研究

为什么要先进行案例研究?

没有比较好的数学基础,直接接触深度学习会非常抽象,所以这里我们先通过一个预测 Pokemon Go 的 Combat Power (CP) 值的案例,打开深度学习的大门。

Regression (回归)

应用举例(预测Pokemon Go 进化后的战斗力)

比如估计一只神奇宝贝进化后的 CP 值(战斗力)。

下面是一只妙蛙种子,可以进化为妙蛙草,现在的CP值是14,我们想估计进化后的CP值是多少;进化需要糖果,好处就是如果它进化后CP值不满意,那就不用浪费糖果来进化它了,可以选择性价比高的神奇宝贝。

输入用了一些不同的 x 来代表不同的属性,比如战斗力用 xcp 来表示,物种 xs 来表示…

输出就是进化后的CP值

三个步骤

上一篇提到了机器学习的三个步骤:

Step1.确定一组函数(Model)。

Step2.将训练集对函数集进行训练。

Step3.挑选出“最好”的函数 f?

然后就可以使用 f? 来对新的测试集进行检测。

Step1: Model

这个model 应该长什么样子呢,先写一个简单的:我们可以认为进化后的CP值 y 等于进化前的CP值 xcp 乘以一个参数 w 再加上一个参数 b 。

y=b+w?xcp(1?1)

w 和 b 是参数,可以是任何数值。

可以有

f1:y=10.0+9.0?xcpf2:y=9.8+9.2?xcpf3:y=?0.8?1.2?xcp

这个函数集中可以有无限多的 function。所以我们用 y=b+w?xcp 代表这些 function 所成的集合。还有比如上面的 f3 ,明显是不正确的,因为CP值有个条件都是正的,那乘以 ?1.2 就变成负的了,所以我们接着就要根据训练集来找到,这个 function set 里面,哪个是合理的 function。

我们将式1-1 称作 Linear model, Linear model 形式为:

y=b+∑wixi

xi 就是神奇宝贝的各种不同的属性,身高、体重等等,我们将这些称之为 “feature(特征)”;wi 称为 weight(权重),b 称为 bias(偏差)。

Step2: 方程的好坏

现在就需要搜集训练集,这里的数据集是 Supervised 的,所以需要 function 的输入和输出(数值),举例抓了一只杰尼龟,进化前的CP值为612,用 x1 代表这只杰尼龟进化前的CP值,即用上标标示一个完整对象的编号;进化后的CP值为 979,用 y? 1 表示进化后的CP值,用 hat(字母头顶的上尖符号)来表示这是一个正确的值,是实际观察到function该有的输出。

下面我们来看真正的数据集(来源 Source: https://www.openintro.org/stat/data/?data=pokemon

来看10只神奇宝贝的真实数据,x 轴代表进化前的CP值,y 轴代表进化后的CP值。

有了训练集,为了评价 function 的好坏,我们需要定义一个新的函数,称为 Loss function (损失函数),定义如下:

Loss function L :

input: a function, output: how bad it is

Loss function是比较特别的函数,是函数的函数,因为它的输入是一个函数,而输出是表示输入的函数有多不好。 可以写成下面这种形式:

L(f)=L(w,b)

损失函数是由一组参数 w和b决定的,所以可以说损失函数是在衡量一组参数的好坏。

这里用比较常见的定义形式:

L(f)=L(w,b)=∑n=110(y? n?(b+w?xncp))2(1?2)

将实际的数值 y? n 减去 估测的数值 b+w?xncp,然后再给平方,就是 Estimation error(估测误差,总偏差);最后将估测误差加起来就是我们定义的损失函数。

这里不取各个偏差的代数和∑10n=1y? n?(b+w?xncp) 作为总偏差,这是因为这些偏差(y? i?(b+w?xicp))本身有正有负,如果简单地取它们的代数和,就可能互相抵消,这是虽然偏差的代数和很小,却不能保证各个偏差都很小。所以按照式1-2,是这些偏差的平方和最小,就可以保证每一个偏差都很小。

为了更加直观,来对损失函数进行作图:

图上每个点都代表一个方程,比如红色的那个点代表 y=?180?2?xcp 。颜色代表用这个点的方程得到的损失函数有多不好,颜色越偏红色,代表数值越大,越偏蓝色蓝色,代表方程越好。最好的方程就是图中叉叉标记的点。

Step3:最好的方程

定好了损失函数,可以衡量每一个方程的好坏,接下来需要从函数集中挑选一个最好的方程。将这个过程数学化:

f?=argminfL(f)

w?,b?=argminw,bL(w,b)=argminw,b∑n=110(y? n?(b+w?xncp))2(1?3)

由于这里举例的特殊性,对于式1-3,直接使用最小二乘法即可解出最优的 w 和 b,使得总偏差最小。

简单说一下最小二乘法,对于二元函数 f(x,y),函数的极值点必为 ?f?x 及?f?y 同时为零或至少有一个偏导数不存在的点;这是极值的必要条件。用这个极值条件可以解出w 和 b。(详情请参阅《数学分析,第三版下册,欧阳光中 等编》第十五章,第一节)

但这里会使用另外一种做法,Gradient Descent(最速下降法),最速下降法不光能解决式1-3 这一种问题;实际上只要 L 是可微分的,都可以用最速下降法来处理。

Gradient Descent(梯度下降法)

简单来看一下梯度下降法的做法。

考虑只有一个参数 w 的损失函数,随机的选取一个初始点,计算 w=w0 时 L 对 w 的微分,然后顺着切线下降的方向更改 w 的值(因为这里是求极小值),即斜率为负,增加w ;斜率为正,减小w .

那么每次更改 w ,更改多大,用 ηdLdw|w=w0 表示,η 被称为“learning rate”学习速率。

由于这里斜率是负的,所以是 w0?ηdLdw|w=w0 ,得到 w1;接着就是重复上述步骤。

直到找到一个点,这个点的斜率为0。但是例子中的情况会比较疑惑,这样的方法很可能找到的只是局部极值,并不是全局极值,但这是由于我们例子的原因,针对回归问题来说,是不存在局部极值的,只有全局极值。所以这个方法还是可以使用。

下面来看看两个参数的问题。

两个参数的区别就是每次需要对两个参数求偏微分,然后同理更新参数的值。

关于梯度可以参阅《数学分析,第三版下册,欧阳光中 等编》,第十四章第六节。也可以大概看看百度百科又或者wikipedia

将上述做法可视化:

同理梯度下降的缺陷如下图:

可能只是找到了局部极值,但是对于线性回归,可以保证所选取的损失函数式1-2是 convex(凸的,即只存在唯一极值)。上图右边就是损失函数的等高线图,可以看出是一圈一圈向内减小的。

结果怎么样呢?

将求出的结果绘图如下

可以计算出训练集上的偏差绝对值之和为 31.9

但真正关心的并不是在训练集上的偏差,而是Generalization的情况,就是需要在新的数据集(测试集)上来计算偏差。如下图:

使用十个新的神奇宝贝的数据作为测试集计算出偏差绝对值之和为35.

接下来考虑是否能够做的更好,可能并不只是简单的直线,考虑其他model的情况:

比如重新设计一个model,多一个二次项,来求出参数,得到Average Error为15.4,在训练集上看起来更好了。在测试集上得出的Average Error是18.4,确实是更好的Model。

再考虑三次项:

得到的结果看起来和二次项时候的结果差别不大,稍微好一点点。也可以看到w3已经非常小了,说明三次项影响已经不大了。

再考虑四次项:

此时在训练集上可以做的更好,但是测试集的结果变差了。

再考虑五次项:

可以看到测试集的结果非常差。

Overfitting(过拟合,过度学习)

将训练集上的Average Error变化进行作图:

可以看到训练集上的 Average Error 逐渐变小。

上面的那些model,高次项是包含低次项的function。理论上确实次幂越高越复杂的方程,可以让训练集的结果越低。但加上测试集的结果:

观察得出结果:虽然越复杂的model可以在训练集上得到更好的结果,但越复杂的model并不一定在测试集上有好的结果。这个结论叫做“Overfitting(过拟合)”。

如果此时要选model的话,最好的选择就是三次项式子的model。

实际生活中典型的学驾照,学驾照的时候在驾校的训练集上人们可以做的很好,但上路之后真正的测试集就完全无法驾驭。这里只是举个训练集很好,而测试集结果很差的例子^_^

如果数据更多会怎样?

考虑60只神奇宝贝的数据

可以看出物种也是一个关键性的因素,只考虑进化前的CP值是太局限的,刚才的model就设计的不太好。

新的model如下

将这个model写成linear model的形式:

来看做出来的结果:

不同种类的神奇宝贝用的参数不同,用颜色区分。此时model在训练集上可以做的更好,在测试集上的结果也是比之前的18.1更好。

还有其他因素的影响吗?

比如对身高,体重,生命值进行绘图:

重新设计model:

考虑上生命值(xhp)、高度(xh)、重量(xw)

这么复杂的model,理论上训练集上可以得到更好的结果,实际为1.9,确实是更低。但是测试集的结果就过拟合了。

Regularization(正则化)

对于上面那么多参数结果并不理想的情况,这里进行正则化处理,将之前的损失函数进行修改:

y=b+∑wixi(1?4)L(f)=L(w,b)=∑n=110(y? n?(b+w?xncp))2+λ∑(wi)2(1?5)

式1-5 中多加了一项: λ∑(wi)2 ,结论是wi越小,则方程(式1-4)就越好。还可以说当 wi 越小,则方程越平滑。

平滑的意思是当输入变化时,输出对输入的变化不敏感。比如式1-5 中输入增加了 Δxi 则输入就增加了 wiΔxi ,可以看出当wi越小,输出变化越不明显。还比如测试集的输入有一些噪音数据,越平滑的方程就会受到更小的影响。

上图是对 λ进行调整得出的结果。当 λ 越大的时候, λ∑(wi)2 这一项的影响力越大,所以当λ 越大的时候,方程越平滑。

训练集上得到的结果是:当 λ 越大的时候,在训练集上得到的Error 是越大的。这是合理的现象,因为当 λ 越大的时候,就越倾向于考虑 w 本身值,减少考虑error。但是测试集上得到的error 是先减小又增大的。这里喜欢比较平滑的function,因为上面讲到对于噪音数据有很好的鲁棒性,所以开始增加 λ 的时候性能是越来越好;但是又不喜欢太平滑的function,最平滑的function就是一条水平线了,那就相当于什么都没有做,所以太平滑的function又会得到糟糕的结果。

所以最后这件事情就是找到最合适的 λ ,此时带进式1-5 求出b 和 wi,得到的function就是最优的function。

对于Regularization 的时候,多加的一项:λ∑(wi)2,并没有考虑 b ,是因为期望得到平滑的function,但bias这项并不影响平滑程度,它只是将function上下移动,跟function的平滑程度是没有关系的。

总结

  • Pokemon:原始的CP值极大程度的决定了进化后的CP值,但可能还有其他的一些因素。
  • Gradient descent:梯度下降的做法;后面会讲到它的理论依据和要点。
  • OverfittingRegularization:过拟合和正则化,主要介绍了表象;后面会讲到更多这方面的理论

新博客地址:http://yoferzhang.com/post/20170326ML02Regression

时间: 2024-10-25 13:51:30

机器学习入门系列02,Regression 回归:案例研究的相关文章

机器学习入门系列01,Introduction 简介

我们将要学习什么东东? 什么是机器学习? 有右边这样非常大的音频数据集,写程序来进行学习,然后可以输出音频"Hello" 有右边这样非常大的图片数据集,写程序来进行学习,然后可以识别左边这样图,识别为正确的物种. 机器学习 ≈ 寻找一个函数 Framework 框架 Image Recognition 图像识别 函数集(f1,f2,-),通常将一个函数称为Model(模型) 为了找到最好的函数 f ,将训练集图像放入函数集的输入中,函数集输出识别结果. 下面来看具体步骤 Step1.确

Docker入门系列02

上篇用一个简单的示例,简单的介绍了 Dockerfile 的配置及其相关的命令.这一篇会在上篇的示例程序里,继续添加新代码及如何将单元测试也放入 Image 建立过程内. 首先,我们需要建一个新的类库,将业务相关的代码从原来的项目移到新类库里.创建类库的代码如下: dotnet new classlib -o utils dotnet restore utils/ dotnet sln add utils/utils.csproj 现在我们已经创建好了新的类库,那么现在coding--,我会在文

机器学习入门 - 1. 介绍与决策树(decision tree)

机器学习(Machine Learning) 介绍与决策树(Decision Tree) 机器学习入门系列 是 个人学习过程中的一些记录与心得.其主要以要点形式呈现,简洁明了. 1.什么是机器学习? 一个比较概括的理解是: 根据现有的数据,预测未来 2.核心思想 : Generalization 可以理解为,归纳.概括.就像是人的学习一样,找出一件事物与与一件事物的联系 3.归纳性的机器学习(Inductive machine learning) 其核心思想是使用训练数据,并从其中摸索出一套适用

【机器学习】机器学习入门08 - 聚类与聚类算法K-Means

时间过得很快,这篇文章已经是机器学习入门系列的最后一篇了.短短八周的时间里,虽然对机器学习并没有太多应用和熟悉的机会,但对于机器学习一些基本概念已经差不多有了一个提纲挈领的了解,如分类和回归,损失函数,以及一些简单的算法--kNN算法.决策树算法等. 那么,今天就用聚类和K-Means算法来结束我们这段机器学习之旅. 1. 聚类 1.1 什么是聚类 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他

机器学习系列-Logistic Regression(1)

机器学习 这是记录自学的过程,目前的理论基础就是:大学高等数学+线性代数+概率论.编程基础:C/C++,python在观看机器学习实战这本书,慢慢介入.相信有读过以上三门课的人完全可以开始自学机器学习了,当然我上面这三门课学的一般,所以你只知道有这么一个公式或名词,不懂可以百度之深究之.在写这篇文章的时候作者机器学习还没学完,故文章中的错误还请不吝指出.再次声明,系列文章只是分享学习过程,学习点滴,不能保证文章的技术含量.后续再技术的不断完善中,我会重新再捋一遍这个学习过程,纠正其中错误. 目前

机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)

机器学习中的数学(1)-回归(regression).梯度下降(gradient descent) 版权声明: 本文由LeftNotEasy所有,发布于http://leftnoteasy.cnblogs.com.如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任. 前言: 上次写过一篇关于贝叶斯概率论的数学,最近时间比较紧,coding的任务比较重,不过还是抽空看了一些机器学习的书和视频,其中很推荐两个:一个是stanford的machine learning公开课,在

Coursera机器学习-第三周-逻辑回归Logistic Regression

Classification and Representation 1. Classification Linear Regression (线性回归)考虑的是连续值([0,1]之间的数)的问题,而Logistic Regression(逻辑回归)考虑的是离散值(例如只能取0或1而不能取0到1之间的数)的问题.举个例子,你需要根据以往季度的电力数据,预测下一季度的电力数据,这个时候需要使用的是线性回归,因为这个值是连续的,而不是离散的.而当你需要判断这个人抽烟还是不抽烟的问题时,就需要使用逻辑回

Angular系列----AngularJS入门教程02:静态模板(转载)

为了说明angularJS如何增强了标准HTML,我们先将创建一个静态HTML页面模板,然后把这个静态HTML页面模板转换成能动态显示的AngularJS模板. 在本步骤中,我们往HTML页面中添加两个手机的基本信息,用以下命令将工作目录重置到步骤1. git checkout -f step-1 请编辑app/index.html文件,将下面的代码添加到index.html文件中,然后运行该应用查看效果. app/index.html <ul> <li> <span>

吴恩达《深度学习》-课后测验-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-Week2 Autonomous driving (case study) (case study)( 自动驾驶 (案例研究))

Week2 Autonomous driving (case study) (case study)( 自动驾驶 (案例研究)) \1. To help you practice strategies for machine learning, in this week we'll present another scenario and ask how you would act. We think this "simulator" of working in a machine l