Regression(回归)
以宝可梦为引例。
一只宝可梦会有cp值、hp值、名称、体型等多维度属性,假设我们想把这些已知量输入function,输出进化后的cp值,从而以更高的效率获得更强的宝可梦。
则我们需要找到尽可能精确的func。
因此,Regression的定义就是找到一个function,通过输入特征x,输出一个数值y。
前篇我们介绍了机器学习的三个基本步骤:
①找到model,即function set。
②判断各个function的好坏。
③找到最好的function。
第一步:找一个简单的Model
知道了步骤,我们可以开干了。
首先尽量找一种简单的function。比如下图的y = b + Σwx.
- x:一个样本的一个或多个维度的特征
- w:各个特征的权重weight
- b:偏移量bias
- w、b都是参数,可以任意取,我们需要找出其中最好的值
这种y = b + Σwx的function形式集合被称为Linear model,即线性模型。在回归问题中使用线性模型的方法也被称作线性回归。
第二步:判断各个function的好坏
现在我们手上有10组已知样本数据。
为了衡量各个function的好坏,我们需要一个量化标准,因此我们引入Loss Function的概念。
统计10组原始数据与预测数据之差的平方的和,显然和越小模型越好。
第三步:以Loss Function为指标找出最佳的Function
我们知道Loss Function的值,即损失值最小的那一个function就是我们需要找的。但是w、b的取值是无穷无尽的,他们对应的function和损失值也是无限多的,为了进行有效筛选,这里我们引入Gradient Descent即梯度下降法。
梯度下降法
我们考虑最简单的情况,即只针对w这单个参数进行分析,对于该Loss(w)—— w函数图像,显然我们需要的是loss(w)最小值对应的w值。
因此,我们可以使用梯度下降法来逐渐逼近求出该点的坐标。
首先,我们随机选取一个w0,并对w进行微分操作。容易看出dL/dw0如果小于0,则代表该点切线斜率小于0,说明更小的L(w)在该点右侧,需要增大w0;如果dL/dw0大于0,则需要减小w0。
了解到大致方法之后,我们定义一个η代表Learning Rate学习率,可以简要理解为每次移动w的步长。
最后,我们容易得到新的w1 = w0 - η(dL/dw),这就是梯度下降法。
得不到全局最优的特殊情况
但有时我们通过梯度下降法得不到全局最优解,因为在这之前w的更新就被一个dL/dw = 0的点截住了,导致w无法进行下一步更新。
我们称该点为局部最优,而非全局最优。
最后是否能跑到全局最优的点似乎依赖于起始点的选择。
但是但是但是!!!
线性回归中不用担心这种情况,因为线性回归中没有局部最优解,换言之一定可以得到全局最优解。
正常线性回归中两个参数的梯度下降
在学习到单个参数的下降方法之后,我们推广到正常情况,即L(w,b)。
与单个参数时并没有本质不同,将微分改为偏微分,同时改变两个参数即可。仍然注意要减去η * 偏微分的值。
在回归里过拟合的情况
针对训练集优化function
由于直线的拟合效果一般。我们考虑逐渐对Xcp升次。
这么做的理由是:这样可以扩大我们的function set,提高找到更精确function的可能性。如下图,只要令高次Xcp的w = 0就可降次,因此高次是包含低次的。
似乎训练集上的拟合效果的确比直线好了不少。
过拟合
但如果不加限制地升次会导致一个严重的问题。
我们得到的function在训练集上表现很好,但在另外的测试集上就直接被抬走了!
这种在训练集上表现很好,但在测试集上表现不佳的情况被称为过拟合。其原因显然是我们的function太过针对具体的训练集数据,对另外的数据的普适性降低。
因此,function并不一定越复杂就越合适。
如果你希望模型能表现得更强大
在实际情况中,我们很可能得到如下的数据集。
显然该数据集依据之前的经验难以找到合适的function去拟合。这是因为Xcp一个特征已经不足以描述它了,其实这些数据背后昭示的是:宝可梦的种类Xs对种族值有巨大影响。
因此我们重新建模。
我们添加一个新变量δ,它代表的意义如下图所示:
如果种族Xs = 某一个种族,则为1,否则为0。这也是一个线性回归方程。
这样就可以保证Xs = 某一特定种族时,只有少数参数存活。相当于针对不同的Xs分别拟合一个线性回归方程。这样建模可以保证在实际训练时对数据拟合表现更好。
加入更多特征
实际的数据可以有多维特征,我们可以尽量考虑更多的输入特征。将血量、重量、高度等特征加入模型中。