李宏毅机器学习笔记:线性回归建模与模型改进实例
机器学习目的: 机器自动找函数
回归问题(Regression):函数输出是标量
例子:预测pokemon(口袋精灵)的进化值
任务描述:
Pokemon的特征有进化前cp值,种类,身高,体重等,需要通过已有的数据,学习出一个模型(函数),预测Pokemon进化后的cp值。
如何寻找回归问题的函数?
第一步:模型的建立
简单的模型:y = b + w ∙ xcp
该模型输入为进化前cp值, w,b是参数
复杂模型:
函数输出是Pokemon的各项特征线性组合的输出
模型包括一组函数,(w,b)的一组取值就是一个函数f,首先需要根据训练数据找到一个最优函数,使得函数f的预测尽可能准确。如何找到这个最优的函数呢?需要引入损失函数loss function
Loss function: 衡量网络函数f的好坏,标签数据输出与通过f函数训练输出的差值,其表达式为:
找L最小值:梯度下降法
梯度下降法(gradient descent)找到损失函数loss function的下降方向,再根据学习率(步长)确定参数(比如w , b)的修正值(w1, b1), 经过多轮迭代,找到loss function的最小值(linear regression 线性回归中loss function 为凸函数,不存在局部最小值),对于只有一个参数w的f,直观的方法如下:
可以扩展到两个参数w,b
第二步:模型的评估
通过梯度下降法可以找到在当前训练数据(training data)下的最优的函数f*(找到最优的w*,b*即找到f*),然而这个f*是否可以准确预测呢?需要在测试数据(testing data)测试,以评估该模型的泛化能力(generalizatiion),通过平均错误率来衡量模型的好坏。
尝试不同的模型来比较其错误率
上图可以看出,模型越复杂,其在训练集上的平均错误越低,但我们是否找到了最优的函数呢?答案是否定的,模型过于复杂可能会出现过拟合(overfitting)情况,导致模型泛化能力弱。
第三步:模型的改进
前述的模型中只考虑到Pokemon进化前的cp值,然后Pokemon还有其他的特征值,如种类,加入种类特征项,重新建立模型。
可以看出改进后的模型的拟合能力和泛化能力都得到增强,如果再加上其他的特征值,构造更复杂的模型,情况会如何呢?加入HP值,身高,体重等特征重新建立模型。
训练集上的错误率降低了,但是测试集上的错误率显著升高了!!!
又出现过拟合情况。因为训练集的局限性,过拟合很难避免,过拟合表明学习器学习到了很多不必要的特征属性,导致其泛化能力降低。
解决的方法之一,在损失函数中加入正则化项,使曲线更平滑
对参数b不用将入正则化项,因为b影响曲线平滑程度,调节λ的值找到最好的模型。