首页 » python机器学习 » python机器学习全文在线阅读

《python机器学习》3.3.4 通过正则化解决过拟合问题

关灯直达底部

过拟合是机器学习中的常见问题,它是指模型在训练数据集上表现良好,但是用于未知数据(测试数据)时性能不佳。如果一个模型出现了过拟合问题,我们也说此模型有高方差,这有可能是因为使用了相关数据中过多的参数,从而使得模型变得过于复杂。同样,模型也可能面临欠拟合(高偏差)问题,这意味着模型过于简单,无法发现训练数据集中隐含的模式,这也会使得模型应用于未知数据时性能不佳。

虽然我们目前只介绍了分类中的线性模型,但对于过拟合与欠拟合问题,最好使用更加复杂的非线性决策边界来阐明,如下图所示:

如果我们多次重复训练一个模型,如使用训练数据集中不同的子集,方差可以用来衡量模型对特定样本实例预测的一致性(或者说变化)。可以说模型对训练数据中的随机性是敏感的。相反,当我们在不同的训练数据集上多次重建模型时,偏差可以从总体上衡量预测值与实际值之间的差异;偏差并不是由样本的随机性导致的,它衡量的是系统误差。

偏差-方差权衡(bias-variance tradeoff)就是通过正则化调整模型的复杂度。正则化是解决共线性(特征间高度相关)的一个很有用的方法,它可以过滤掉滤数据中的噪声,并最终防止过拟合。正则化背后的概念是引入额外的信息(偏差)来对极端参数权重做出惩罚。最常用的正则化形式称为L2正则化(L2 regularization),它有时也称作L2收缩(L2 shrinkage)或权重衰减(weight decay),可写作:

其中,λ为正则化系数。

特征缩放(如标准化等)之所以重要,其中一个原因就是正则化。为了使得正则化起作用,需要确保所有特征的衡量标准保持统一。

使用正则化方法时λ,我们只需在逻辑斯谛回归的代价函数中加入正则化项,以降低回归系数带来的副作用:

通过正则化系数,保持权值较小时,我们就可以控制模型与训练数据的拟合程度。增加λ的值,可以增强正则化的强度。

前面用到了scikit-learn库中的LogisticRegression类,其中的参数C来自下一小节要介绍的支持向量机中的约定,它是正则化系数的倒数:

由此,我们可以将逻辑斯谛回归中经过正则化的代价函数写作:

因此,减小正则化参数倒数C的值相当于增加正则化的强度,这可以通过绘制对两个权重系数进行L2正则化后的图像予以展示:

执行上述代码,我们使用不同的逆正则化参数C拟合了10个逻辑斯谛回归模型。出于演示的目的,我们仅仅记录了类别2区别于其他类别的权重系数。请牢记,我们使用OvR技术来实现多类别分类。

通过结果图像可以看到,如果我们减小参数C的值,也就是增加正则化项的强度,可以导致权重系数逐渐收缩。

由于深入讲解每个分类算法的细节已经超出了本书的讨论范围,因此强烈建议读者阅读Scott Menard博士的书籍(Logistic Regression:From Introductory to Advanced Concepts and Applications,Sage Publications)以了解更多关于逻辑斯谛回归的内容。