Regression : output a scalar 输出一个标量
在机器学习基础的模型中,回归算是一个很多课程引入学习的一个模型了,它可以让我们初步的去了解机器学习的过程。
1 例子
以下是李宏毅老师提到的例子:
股票市场预测:通过输入各种股票市场参数:输出数字
无人车驾驶:输入车上传感器参数:输出方向盘角度
商品 推荐:使用者特征,商品特征:输出购买可能性
可以看出,回归问题到底是什么了,通过输入一些数字化的参量,通过回归模型去拟合新的函数,这个函数可以得到和输入参量有关的数字化的参量。拟合成线性模型就是线性回归了(y=kx+b)
例子详解:预测宝可梦的CP(combat power)值:输入妙蛙种子的特性:模型求解得出进化之后的CP,如图1-1.
图1-1 样例详解
定义变量:xcp 当前cp值、xs
种类、xhp
生命值、xw
重量、xh
高度
y 输出进化之后cp
显而易见的是,我们要使用上面定义的变量,去作为我们的输入参数,得到我们预测的结果。先使用大量的样本,这些样本是有结果的,去拟合我们的回归模型,在使用模型预测未知的宝可梦的进化后CP值。
2 step1:寻找模型
图2-1 第一步 模型建立
在这个回归问题上,首先,我们先进行模型的建立,我们需要的模型,要输入宝可梦的相关参数,输出宝可梦的CP值。模型可以选为线性模型,比如:
y=b+w×xcp b、w是模型参数(常数),可以任何值,通过b、w不同,可以组成不同的函数。xcp
为进化前的CP,y为进化后的CP,当然,我们也可以使用更多的特征。
Linear model:y=b+wixi
可以发现,上式这种样子函数我们通常是称为线性模型。
xi:称作(feature) 特征,即样本的某一可作为分类参考的值,包括:xcp
当前cp值、xs
种类、xhp
生命值、xw
重量、xh
高度。这里说的通俗一点,其实就是我们感觉可能会对预测结果造成影响的属性,比如宝可梦的CP值,可能会和它的生命值有关啊,生命值就可以作为他的一种特征。
wi:weight 权重,不同的权重可以调节特征对样本最终值的影响,权重可为正可为负,权重越大说明影响越大,为0时说明毫无影响。
b:bias 偏差,可以对模型进行调整。
3 Step 2:模型优劣
图3-1 样本点
接下来,我们要寻找我们的模型了,由于实际上我们的样本数据可能会拟合出无数多个模型的,所以我们需要使用模型的优劣性去寻找较优的模型。
通过大量的样本,xi,每个样本实际输入,yi
样本实际输出,上标代表了样本的编号。样本是供我们进行构建模型以及测试模型的,通常我们是需要大量的样本来构建模型,这个模型中,一个样本包含了这只宝可梦的进化后前CP值,进化后CP值,生命值,种类,重量等,就是我们上文提到过的特征以及需要预测的值。样本应该有我们之前提到过的特征以及需要预测的真实值(当然,这是在这类监督学习的问题中)。使用样本就可以构建模型,有了模型就可以去预测我们未知的更多宝可梦的CP值了。
图3-1就是10个样本点,这些样本的横坐标是开始的CP值,纵坐标是进化后的CP值。可以使用这些样本去拟合很多很多线性函数,这些函数我们需要寻找一个相对较好(准确来说应该是适合实际的情况)的函数供我们使用。
定义一个损失函数去解决这个问题吧:
Loss function:输入:函数
输出:该函数对实际情况不适应性
这个loss function可以理解为输入一个函数,他会告诉我们这个函数有多不好,这里我们需要输入每个模型的b和w(权重和偏差),让他告诉我们这个模型有多不好,然后我们可以选取相对较好的那个。可以看下文:
Lf=n=110(yn-f(xcpn))2 =L(w,b)
=n=110(yn-(b+w×xcpn))2
看最后一个等号后,yn表示样本实际值,b+w×xcpn
表示预测值,作差取平方,这个通常我们称为均方误差。(学过信号检测与估值我们知道其实还有很多种误差都可以使用哦)这里用的是,均方误差之和作为损失函数。
下图,把loss function图像画出:
图3-2 损失函数
通过不同w,b的值计算loss function 得到相关图像,其中红色越深,损失函数太大,蓝色越深越小。我们直觉上得出,那我们就可以选损失函数最小的啊,接着下一步:
4 Step3:best function
而后,我们要从刚的众多函数中寻找某一个函数,使得损失函数最小。就是下图:
寻找损失函数最小的模型如果使用穷举法(把每种情况列出来)确实是一个难题,因为在很多项目中,这样太浪费资源了,所以我们会使用一些算法去实现目的,就是梯度下降。
Gradient descent:梯度下降
可以使用梯度下降的方法,去寻找损失函数最小的函数,但前提是这个函数是可微的。
图4-1 梯度下降
需要寻找响应的w参数来使得损失函数最小。可以看上图4-1,我们使用如下步骤去实现梯度下降:
- 随机选一个初值(其实有很多方法定初值,之后再提啦)
- 计算初值的对w偏导数(其实就是切线斜率),我们知道要寻找最小的函数,若偏导数为正则放弃,偏导数为负且越小越好。从偏导为负的方向选取下一个值。
- 利用当前偏导与权值计算下一个点进行求偏导,偏导为负且绝对值越大说明下降程度越大,我们就移动越多哦。(这个权值η
其实就是学习率,看上图4-1可以知道是如何运算的)
- 偏导数为0说明达到了局部最低点(当然也有可能是驻点),看上图4-1,其实我们发现,并没有找到全局最优点。
那么我们有两个参数情况下,要使用梯度下降法:
- 随机选2个参数w,b
- 计算分别计算两个参数处的偏微分,分别对每个数分别移动看下图:
高数中我们就学过了梯度的定义,还是很好理解的。梯度:
图4-2 梯度下降结果
最后的目标当求到偏导数为0时,结果可得到局部最优值。但是当抵达导数为0时(驻点),算法也会停止。我们经常会害怕没有寻找到全局最优解怎么办,但是在回归问题中其实大可不必,回归问题中的损失函数都是凸函数,是没有局部最优解的。
之后我们就找到了我们选出的最好的函数啦。
图4-3 拟合出相关函数
这里我们现在有了我们的模型,但是我们更加关注一点,就是这个模型实际应用时它的能力到底好不好呢?这种能力我们通常叫做泛化能力(模型对新的样本的适用能力),通常我们还会用一些已知预测结果的测试样本去测试模型,得到误差叫测试误差,这类样本就是测试集,可以看图4-3。那么如何使模型会更好呢?也许我们需要引入较为复杂的模型去试试。
5使用其他非线性模型
为了使效果更好,我们引入了二次的非线性模型进行构建,这也算是一个尝试:
图5-1 非线性结果
- 发现使用非线性拟合结果更好,于是选择更高阶模型尝试。阶数上升,模型也更复杂了,但是在更高阶的模型中,会出现了明显的过拟合。这里我们就要了解一个非常重要的概念了,很多情况下,尤其在模型越来越复杂时,会发现产生过拟合,过拟合就是指为了适合样本,使得模型过于适应样本而不适于实际情况。我们知道,复杂的模型实际上不一定是最好的。
- 模型过于简单会导致实际误差过大,过于发杂会导致过拟合。
- 收集更多的数据也是一个是模型更好的方法,通过收集更多的数据可以发现可能存在更多的隐藏因素影响(视频中这个讲的很好理解的,可以看看视频)。
- 使用δ
函数可以进行函数的分情况处理。比如:对宝可梦进行分物种,对不同的物种,使用不同的模型进行拟合测试。δ
函数(冲激函数)是信号中常用的函数。其实可以理解为分段函数的判决,如果是a种类的宝可梦,使用a样本拟合的模型,b种的使用b拟合的。
- 其次,使用更多的特征或许也有更好的效果,因为很多特征都会对结果产生或多或少的影响。但是较为复杂的模型可能会产生过拟合,这时我们就可以引入正则化方式。
- 正则化(regularization):过拟合情况处理时,可以给损失函数增加一个正则惩罚项。使L最小化的同时,使w较小,这样可以使拟合的函数较为平滑(具体为什么平滑可以看视频1小时8分左右)。曲线平滑我们认为较为符合实际,当然正则化的参数也不能太大。正则化可以用于噪声控制等一些应用。
这里我们进行参数正则化,给偏差值加上正则化,在该项目中影响不大,对函数是否平滑没有影响。
图5-2 正则化之后的结果
我们发现,在λ变化时,寻找最合适的模型,该模型在测试集上正则化损失函数达到最小,我们更倾向于使曲线更平滑,但不是过于平滑。