过拟合问题:
训练误差(training error) & 泛化误差( generalization error)
通常,对于分类算法可能产生两种类型的误差:训练误差& 泛化误差。
训练误差:就是你的模型,对于现有的训练样本集,他们之间的拟合程度;
泛化误差:就是你模型的泛化能力。就是对于新的样本数据的分类能力是怎么样的。
好的分类模型,它的训练误差 & 泛化误差都比较低。
如果,模型的训练误差比较高,那么这个模型就是欠拟合(under-fitting),就是对于训练样本的拟合程度不够;
如果,模型的训练误差低,但是泛化误差比较高,那么这个模型就是过拟合(overfitting):就是过度拟合训练数据,导致模型的泛化能力,反而随着模型与训练数据的拟合程度增高而下降。
对于欠拟合问题,可以通过增加分类属性的数量、选取合适的分类属性等方法,提高模型对于训练样本的拟合程度。但是要注意,随着分类模型对于样本的拟合程度逐渐增加,当决策树深度达到一定值的时候,即使训练误差仍在下降,模型的泛化误差却会不断升高,产生过拟合现象。
例子:过拟合问题
上面的表格:对口罩销售定价,进行分类的训练样本集。表里的属性包括:口罩的功能、是否为纯色。
下面的表格:是另一组口罩数据,要使用这一组数据作为测试样本集。
如果把两个属性全部用来构建决策树,就可以得到一个3层的决策树(下图)。可以发现, 3层决策树能够很好地拟合训练样本集中的数据,它的训练误差为0。但是,如果使用测试样本,对这个3层决策树进行测试,会误差高达2/5。
这时候,你可以再构建一个2层的决策树。这个决策树,不强求对于训练数据的拟合程度(下图)。然后,你会发现2层的决策树,对于测试样本集的表现,反而明显好于之前的3层决策树。
这就是一个简单的过拟合的例子。
总结:
下图:决策树误差曲线:
绿线:泛化误差;
红线:训练误差。
要在决策规模等于700的时候(红色直线),及时止损(此时泛化误差开始变大)。
泛化误差的估计方法
为什么我们要用“估计”这个词呢?
因为在建立分类模型的过程中,我们只用到数据集,可以得到训练误差。但是暂时无法知道真正的泛化误差。所以我们在建立过程中只能“估计”一下泛化误差大概是多少。
注意:这个过程还需要同时考虑模型的复杂度。因为现在公认的一个知识是:模型越复杂,往往包含的附加条件越多,就是那些越可能造成过拟合的因素,就会越多。
泛化误差的估计方法,主要有:训练误差估计、结合模型复杂度、估计统计上限、使用检验集等。
① 训练误差估计
训练误差估计:就是选择最低训练误差的模型,作为最终模型。
但是,这种方法的结果,通常是一种很差的估计。
② 结合模型复杂度估计
奥卡姆剃刀(Occam's razor):
奥卡姆剃刀是很直观的原则,它的定义是:如果有两个有相同泛化误差的模型,你就要选择简单的模型,而不是复杂的模型。
把模型复杂度和分类模型评估,结合在一起的方法有两种:悲观误差评估(pessimistic error estimate)和最小描述长度原则(Minimum Description Length,MDL)。
悲观误差评估:使用训练误差e和模型复杂度惩罚项 Ω 的和来估计泛化误差。
最小描述长度原则:对于一组数据,如果要对它进行保存,为了节省空间,一般采用某种模型对数据进行编码压缩。然后,再保存压缩后的数据。
之后,如果想要正确恢复这些数据,需要把用于编码压缩的模型也保存起来。
最小描述长度要做的事情就是:选择“恰当”的模型,使数据总描述长度最小。
③估计统计上限
估计统计上限:依据多个训练误差形成的分布,选取统计结果的上限值,来作为模型的泛化误差。
④ 使用检验集
标签:误差,泛化,训练,模型,分类,算法,拟合,决策树 From: https://blog.csdn.net/AveryHzzz/article/details/144084706这个方法就是把原始的训练数据集,分为两个较小的子集(训练集和确认集)。
比如:2/3用于训练,1/3用于误差估计。
要注意:这时候,你用于训练的样本会变少。有时候也会产生问题。
所以,没有完美的办法。