机器学习-过拟合与增强模型的泛化能力

过拟合是什么呢?
过拟合简单来说就是模型是由训练数据集得来的,得到的模型只针对训练集有更好的预测效果,对于未知的数据集预测效果很差。这其实是由于训练过程中,模型过于偏向于训练数据集,导致模型对训练数据集的拟合效果很好,导致模型失去了泛化能力。
模型的泛化能力即指模型对于未知数据的预测能力。往往我们都希望我们的模型泛化能力强,这样才能真正的具有应用于实际的可靠性。

那么对于过拟合我们应该采取什么方法去解决呢?或者说如何增强模型的泛化能力
两种常用的方法是正则化和交叉验证。
正则化是从模型上着手,改变模型的表达式来达到目的。而交叉验证则是从数据集出发,通过对数据集的各种划分,在进行训练来提高模型的泛化能力。

正则化的出发点是是什么呢?
往往过拟合的原因是由于模型参数过多或参数为了“迎合”训练集导致参数分布“太偏”,导致模型过于复杂。正则化则是在损失函数后面加上一个正则化项aJ(f),J(f)也称结构风险,a为调节经验和结构风险的系数。J(f)往往为||w||2,其实J(f)的作用相当于将权重向量w的各个分项向0处拉,这样就会使模型变得简单,同时,如果w中有的分量接近于零,其实相当于减少了模型权重的参数个数,因为当w的某个分量很接近于0时,x中与该分量对应的数无论是大还是小与该分量相乘都为零。正则化方法也正符合了奥卡姆剃刀原理。
奥卡姆剃刀原理:在所有可能选择的模型中,能够很好的解释已知数据并且十分简单才是最好的模型。

交叉验证其实相当于充分利用已有数据,尽量的留有未知数据去验证模型。
交叉验证一般三种常见的方法:简单交叉验证、S折交叉验证、留一交叉验证
简单交叉验证:随机的将数据分为两份,一般为3:7,训练集占7份,测试集占3份。当然划分比例不是固定的,可以根据不同的情况去设置。
S折交叉验证:将数据集随机分为s份,取出一份,其余用作训练集,用取出的那一份作测试集。之后放回轮流取出剩下每份数据,重复S次,选择测试效果最好的那次结果。

留一交叉验证:留一交叉验证其实有点像S折交叉验证的特殊情况,假如样本数为N,如果S=N,此时S折交叉验证就相当于留一交叉验证,往往在数据稀缺的时候采用这种方法。

你可能感兴趣的:(机器学习)