专栏首页Python数据科学机器学习读书笔记系列之正则化与模型选择

机器学习读书笔记系列之正则化与模型选择

机器学习读书笔记之正则化与模型选择

整理者:艾奇

原作者:张威,Wei's Homepage

链接:https://wei2624.github.io/MachineLearning/

正则化与模型选择 在选择模型时,如果我们在一个模型中有个参数,那么问题就是这个参数应该是什么值?哪些值可以给出最佳偏差-方差权衡呢。其中,我们从有限集合的模型 中来选取最佳模型。在集合中,我们有不同的模型,或者不同的参数。

1. 交叉验证(Cross Validation)

想象一下,给定数据集与一系列的模型,我们很容易想到通过以下方式来选择模型:

  1. 从集合训练每个模型 ,并得到相应的假设
  2. 选取最小训练误差的模型

这个想法不能达到目的因为当我们选择的多项数阶数越高时,模型会更好的拟合训练数据集。然而,这个模型将会在新的数据集中有很高的统一化误差,也就是高方差。

在这个情况中,保留交叉验证(hold-out cross validation)将会做得更好:

  1. 以70%和30%的比例将随机分成训练数据集和验证数据集
  2. 在在中训练每一个 以学习假设
  3. 选择拥有最小经验误差(empirical error)的模型 ,我们将它标记为 ε

通过以上几步,我们试图通过测试模型在验证集上的表现以估计真实统一化误差。在第3步中,在选择最优模型后,我们可以用整个数据集来重复训练模型来得到最佳假设模型。然而,即使我们可以这样做,我们仍然选择的是基于70%数据集来训练模型。当数据少的时候这是很糟糕的。

因此,我们引出K折交叉验证(K-fold cross validation)

  1. 随机将分成个分离的子集,每个子集有m/k个样本,记为
  2. 对于每个模型,我们排除一个子集并标记为,然后我们用其余的样本训练模型以得到。我们在上测试模型,并且得到 。我们这样遍历每一个。最后,我们获取统一化误差除以的平均。
  3. 我们选择有最小平均统一误差的模型

通常我们取k为10。虽然这样计算上很复杂,但是它会给我们很好的结果。如果数据很少,我们也可能设。在这种情况下,我们每一次除去一个样本,这种方法叫除一交叉验证(leave-one-out cross validation)

2. 特征选择(Feature Selection)

如果我们有n个特征,m个样本,其中 (VC 维度is O(n)),我们可能会过度拟合。在这种情况下,你想选择最重要的特征来训练。在暴力算法中,我们会有用2n 个特征组合,我们会有2n 个可能的模型,这处理起来会很费力。因此我们可以选择用向前搜索算法(forward search algorithm):

  1. 我们初始化为F=∅
  2. 重复:(a)for i=1,…,n 如果, 让 并且使用交叉验证算法来估计。(b)设置F作为(a)中的最佳特征子集。
  3. 从以上选择最佳特征子集。

你可以通过设置目标特征数量来终止循环。相反地,在特征选择中我们也可以使用向后搜索算法(backward search),这于去除算法类似。然而,因为这两种算法的时间复杂度都是 ,它们训练起来都会比较慢。

然而,我们也可以使用过滤特征选择(filter feature selection)。它的概念是对于标签y,我们会根据每一个特征提供了多少信息来给它打分,然后挑选出最佳者。一个容易想到的方法是根据每个xi和标签y的相关性打分。实际中,我们将分数设为相互信息(mutual information):

其中我们假设每个特征和标签都是二元值,并且求和覆盖整个变量域。每一个可能性都会从训练数据集中计算。为了进一步理解,我们知道:

其中KL是相对熵(Kullback-Leibler divergence)。它计算了竖线两边变量分布的差异。如果和 y 是独立的,那么 KL 是0。这代表着特征和标签直接没有任何关系。然而如果MI很高,那么这个特征和标签有强相关性。

3. 贝叶斯统计与正则化(Bayesian Statistics and regularization)

在前面一章我们讨论了最大似然法(maximum likelihood (ML) algorithm) 是如何训练模型参数的:

在这种情况下,我们视θ 为未知参数,它已经存在但是未知。我们的任务是找到未知参数并计算它的值。同时θ也是随机的,因此我们设置一个先验值,称它为先验分布(prior distribution)。基于先验分布,我们可以用S数据集来计算后验分布:

使用后验分布来预测推断,我们有:

现在,我们可以计算条件期望值y。然而计算后验值的完全解是很难的,因为分母中的积分很难得到完全解。因此,我们用另一种方式来计算,我们找到一个后验值的点估计,在这个点上我们获得后验值的最佳 θ。最大后验MAP(maximum a posteriori) 可以用以下方法计算:

通常来讲,先验分布有0均值,单位方差。这会使MAP 比ML 更不容易过度拟合。

本文分享自微信公众号 - Python数据科学(PyDataScience)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 太牛逼了!用 Python 实现抖音上的“人像动漫化”特效,原来这么简单!

    前几天,女友拉着我和她玩儿抖音,就是这个人像动漫化的操作,顿时觉得很好玩儿。我心想:python既然这么强大,是不是也可以使用python程序来实现这样一个操作...

    用户2769421
  • Python 实战 | 一键导出微信阅读记录和笔记

    出处:https://www.cnblogs.com/cloudbird/p/12683546.html

    用户2769421
  • 这些世界杯球星你真的认识吗?不如通过Python来认识一下吧

    回到我们的正题,对于世界杯的球星们,人们知道的一般都是C罗,梅西,德罗巴等巨星,而对一些其它球星却很少了解。对于这些球星,你认识的有多少呢?下面就跟我一起认识一...

    用户2769421
  • 看照片挑民宿:Airbnb如何重新训练ResNet50,实现房间图片分类优化

    大数据文摘
  • 建立智能的解决方案:将TensorFlow用于声音分类

    对于人类的语音识别,目前有很多不同的项目和服务,像Pocketsphinx,谷歌的语音API,以及其他等等。这样的应用程序和服务能够以一种很不错的质量识别语音然...

    AiTechYun
  • xgboost输出特征重要性排名和权重值

    根据结构分数的增益情况计算出来选择哪个特征的哪个分割点,某个特征的重要性,就是它在所有树中出现的次数之和。

    机器学习AI算法工程
  • 教你简单解决过拟合问题(附公式)

    作者:Ahmed Gad 翻译:韩海畴 校对:丁楠雅 本文带大家认识了什么是过拟合,并且示范了用正则化的方法来避免过拟合的问题。 ? 多项式回归&过拟合 你可...

    数据派THU
  • 教程 | 如何使用TensorFlow实现音频分类任务

    机器之心
  • 谷歌机器学习白皮书全解析 43条黄金法则

    from http://3g.163.com/touch/article.html?docid=CBMPFGTL00098GJ5&qd=pc_adaptatio...

    用户1908973
  • GluonNLP让NPL变得更加简单

    之前我们讲过NPL(自然语言处理),使用的是NLTK这样一个包,现在呢,我们又有了新的法宝----GluonNPL。在做自然语言处理上能帮我们提升不少效率。

    我被狗咬了

扫码关注云+社区

领取腾讯云代金券