通常改进算法性能有以下几种方法:
1、增加数据
但是有更多的数据不一定能获得更好的效果。
2、选用更少的特征
来防止过拟合。
3、选用更多的特征
也许特征不足,会导致欠拟合。
4、增加额外的多项式特征
例如等
5、尝试减少正则化参数
6、尝试增大正则化参数
但是我们需要知道在什么情况下选择哪种方法更合适,而不是随便选一个会浪费时间。
因此就出现了机器学习诊断法,诊断法就是一种测试法,来洞察这样做是不是能提高性能。
一、评估假设
在改进算法之前,先要学习评估假设,看看好的程度、坏的程度是怎样。
对于特征少的训练样本,我们可以画图来看看训练loss的走向,来判断欠拟合或者过拟合。但是特征数量很多时,不能直观地可视化。
常用的评估方法:留出法。把数据划分为训练集和测试集(常用随机划分比例是7:3)。
例如线性回归的训练过程:
1)用训练样本来最小化训练误差J(),来学习到参数。这里仅仅用到训练数据。
2)计算测试误差。把上一步求到的参数,代入,求出误差。
类似的,对于Logistic回归:
1)用训练样本来学习到参数
2)计算测试误差。
还有另一种错误分类误差(也叫0/1分类误差,0和1代表正确或者错误):
也可以用0/1分类误差来定义为测试误差。
二、模型选择
模型选择,也就是确定你的模型多项式次数,例如1次(线性)、2次、3次等等。
常用交叉验证法:把数据划分为训练集、验证集、测试集(6:2:2)。
对于多个模型,分别求出对应的最小化误差参数,然后用交叉验证集去计算交叉验证误差,选择那个交叉验证误差最小的假设作为模型。然后可以用测试集来衡量这个被选出来的模型的泛化能力了。