机器学习里的回归函数就是通过不断去拟合数据集里的数据来生成的,如果太简单会出现偏差,太复杂又会出现过拟合现象。
过拟合
下面就是一个过拟合的例子。
这个数据集的回归函数可能用一次函数会更合理一些。
欠拟合与过拟合对比
过拟合 (Overfitting) 的相反就是欠拟合 (Underfitting),下面给出两个拟合的错误率对比曲线。
欠拟合没什么好说的,随着拟合函数复杂度提高,误差肯定下降。而过拟合在较为复杂的情况下对于原始数据集里的数据预测趋于 100% 正确,因为这个时候拟合函数是完全连通数据集里的所有数据的。
数据分类
注意,这里说的分类不是指分类器里的分类,而是将训练数据分成不同类来测量拟合函数的优劣。
分成训练数据和测试数据
这可能是入门机器学习的第一想法了,数据集除了训练就是测试。
这种方法的好处在于:
通过训练数据测出机器学习算法的哪个参数值最好
通过测试数据评判哪个算法性能更好
校验数据
第三种方法是将一部分的训练数据作为校验数据,这些校验数据是专门用来测量模型的拟合程度的。
这种方法也有自己的缺点:
会浪费掉一些训练数据,毕竟分走了一部分
会让模型趋于简单化,因为有校验数据的存在,会一直去防止过拟合
交叉检验
一种更好的数据集分类是每次都从训练数据里拿不同的数据作为校验数据,最后再做一下平均值来测量结果即可。
上图是做了 4 次校验,每次都取不同的校验数据。当然多少次校验也是个问题,少了训练数据会变少,多了又会有一些 Noise。一般 5 ~ 10 次是最好的。