error(误差)主要有两个来源:bias(偏差)和variance(方差)
有关bias和variance的介绍可以见链接https://en.wikipedia.org/wiki/Bias–variance_tradeoff
下面简单介绍以下bias和variance
上图最后一个公式中可以知道当样本中数据量越多,variance越小
其实上面说来说去都不好解释,下面用一张图表示
Bias就是的平均值(样本平均值)偏离实际数据平均值的程度
Variance则是样本点离样本平均值的分散程度。
宝可梦预测实验对Bias与Variance的研究
下面利用不同的样本,每个样本中有10个宝可梦,下图的universes是李老师自己定义的宇宙,其实就是不同样本,用相同的Model去训练得到不同的function
当有100个样本的时候,在不同的Model下得到不同的结果
从上图中可以看出,Model越复杂,得到的function之间越来越分散,即Variance越来越大。为什么呢?因为越简单的Model,受训练数据的影响越小
下面利用该实验研究以下Bias:
是宝可梦升级的实际函数,不是我们训练得到的函数哦,对每个样本在同一Model训练得到的function求平均,见下图
在不同Model下求所有样本训练得到的function平均以及进行对比,得到下图,图中红色的为5000个样本中每个样本训练得到的function,蓝色为function平均,黑色为:
从上图中可以看出Model越复杂,function平均即与实际函数越接近,即Bias越小。那么为什么呢?其实复杂的Model是包含简单的Model的,比如:
等价于
因为这种包含关系导致Bias随着Model越来越复杂而越来越小
如果还没懂看下面途中Model包含的范围
所以总结以下:Model越复杂,Bias越小,Variance越大,如下图
这里的图中有两个概念Overfitting(过拟合)和Underfitting(欠拟合)
Overfitting在训练数据上拟合的特别好,但是到了测试数据中,就会拟合的特别差。
如何理解呢?看下图(够形象吧):
当Model越来越复杂,就会出现Overfitting,不够复杂又会出现Underfitting,这个在机器学习和深度学习中是个很重要的问题,我会在以后的内容中进行介绍。
如何处理Overfitting,或者高variance的现象呢?
一种方法是增加每个训练样本中的数据量,下面对每个样本使用不同的数据量进行比较:
另一种方法是Regularization(正则化),相关推荐链接:https://www.cnblogs.com/nowornever-L/p/6862320.html
正则化就是对复杂的model的参数加上惩罚项,比如下面一个较复杂的model
比如为了使和尽可能小,从而保证不会过拟合
上图就是Regularization后的效果,使和尽可能小,得到的结果不十分分散。
Model Selection模型选择
在对选择模型时,需要使bias和variance达到一个平衡,使得总误差最小
但是在实际的模型选择时会出现一个问题,那就是在利用testing data对不同model下跑出的结果进行误差计算时,在testing data下计算的误差最小的那一个model在对实际数据进行测试时可能并不是最好的(但是实际的数据又不能在阶段运用到诶),实际数据下计算的误差通常大于testing data下计算的误差
那么如何对上述问题进行处理呢?
这里要引入一个新的概念(方法):cross validation交叉验证
附上交叉验证一个比较好的了解链接:https://www.cnblogs.com/pinard/p/5992719.html
首先将数据分成三部分,training data、validation data和testing data。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。
上图中的public是指你机器学习过程中的testing data,private是实际用到这个模型时的testing data,在机器学习过程中不用到但是呢?当你在public testing data中发现结果不好,不要回头重新对模型进行训练,这是十分不推荐做的,那么当发现testing data上计算出来的误差很不好看的时候该怎么做呢?那就需要重新设计cross validation的方法,怎么设计咩?
这里有一种N-fold Cross Validation方法,将一份training data分成N份,结合下图中解释分成三份,轮流取三份中的一份validation data,另外两份为training data,计算出每种取法下不同model计算得到的误差值。
取平均误差最小的model重新在完整的training data上训练一遍得到最终的function,然后再将该function放到testing data上测试。