怎样评价我们的学习算法得到的假设以及如何防止过拟合和欠拟合的问题。

当我们确定学习算法的参数时,我们考虑的是选择参数来使训练误差最小化。有人认为,得到一个很小的训练误差一定是一件好事。但其实,仅仅是因为这个假设具有很小的训练误差,当将其样本量扩大时,会发现训练误差变大了,这说明它不是一个好的假设。比如下图,拟合的非常好,一旦样本量改变,其训练误差随之增大。

那么我们如何判断一个假设是否是过拟合的呢?我们可以画出假设函数h(x),然后观察。但对于更一般的情况,特征有很多个,比如下图。想要通过画出假设函数来观察,就变得很难甚至不可能了。因此,我们需要另一种评价假设函数的方法。

如下给出了一种评价假设的标准方法,假如我们有这样一组数据组,在这里只展示了10组训练样本,当然通常有成百上千组训练样本(下图)。为了确保我们可以评价我们的假设函数,我们要做的是将这些数据分成两部分。第一部分将成为我们的训练集,第二部分将成为我们的测试集。将所有数据分成训练集和测试集,其中一种典型的分割方法是按照7:3的比例,将70%的数据作为训练集,30%的数据作为测试集。这里的m表示训练样本的总数,而剩下的那部分数据将被用作测试集。下标test将表示这些样本是来自测试集,因此x(1)test,y(1)test将成为第一组测试样本。值得注意的是,在这里选择了前70%的数据作为训练集,后30%的数据作为测试集。但如果这组数据有某种规律或顺序的话,那么最好是随机选择70%作为训练集,剩下的30%作为测试集。当然如果数据已经随机分布了,那么可以选择前70%和后30%。但如果你的数据不是随机排列的,最好还是打乱顺序,或者使用一种随机的顺序来构建数据,然后再取出前70%作为训练集,后30%作为测试集。

下面展示了一种典型的训练和测试线性回归学习算法。首先,对训练集进行学习,得到参数θ。具体来讲就是最小化训练误差J(θ),这里的J(θ)是使用那70%数据来定义得到的,也就是仅仅是训练数据的。接下来,计算测试误差,J下标test来表示测试误差。取出之前从训练集中学习得到的参数θ放在这里,计算测试误差,可以写成如下图的形式(蓝色字迹),这实际上是测试集平方误差的平均值,也就是我们期望得到的值。因此,我们使用包含参数theta的假设函数对每一个测试样本进行测试,然后通过假设函数和测试样本计算出mtest个平方误差。这是当我们使用线性回归和平方误差标准时,测试误差的定义。

那么如果是分类问题,比如说使用逻辑回归的时候呢。

训练和测试逻辑回归的步骤,与之前所说的非常类似。首先我们要从训练数据,也就是所有数据的70%中学习得到参数theta,然后用如下的方式计算测试误差,目标函数和我们平常做逻辑回归的一样。唯一的区别是,现在我们使用的是mtest个测试样本,这里的测试误差Jtest(θ)其实叫误分类率,也被称为0/1错分率。0/1表示了我们预测到的正确或错误样本的情况。当假设函数h(x)的值大于等于0.5,并且y的值等于0,或者当h(x)小于0.5,并且y的值等于1,那么这个误差等于1。这两种情况都表明假设函数对样本进行了误判,这里定义阈值为0.5。也就是说,假设结果更趋向于1,但实际是0;或者说假设更趋向于0,但实际的标签却是1,这两种情况都表明误判。否则,我们将误差值定义为0,此时假设值能够正确对样本y进行分类。

然后,我们就能应用错分率误差来定义测试误差,也就是1/mtest乘以h(i)(xtest)和y(i)的错分率误差(从i=1到mtest的求和)。

斯坦福大学公开课机器学习: advice for applying machine learning - evaluatin a phpothesis(怎么评估学习算法得到的假设以及如何防止过拟合或欠拟合)的更多相关文章

  1. 斯坦福大学公开课机器学习:advice for applying machine learning | diagnosing bias vs. variance(机器学习:诊断偏差和方差问题)

    当我们运行一个学习算法时,如果这个算法的表现不理想,那么有两种原因导致:要么偏差比较大.要么方差比较大.换句话说,要么是欠拟合.要么是过拟合.那么这两种情况,哪个和偏差有关.哪个和方差有关,或者是不是 ...

  2. 第19月第8天 斯坦福大学公开课机器学习 (吴恩达 Andrew Ng)

    1.斯坦福大学公开课机器学习 (吴恩达 Andrew Ng) http://open.163.com/special/opencourse/machinelearning.html 笔记 http:/ ...

  3. 斯坦福大学公开课机器学习:machine learning system design | error metrics for skewed classes(偏斜类问题的定义以及针对偏斜类问题的评估度量值:查准率(precision)和召回率(recall))

    上篇文章提到了误差分析以及设定误差度量值的重要性.那就是设定某个实数来评估学习算法并衡量它的表现.有了算法的评估和误差度量值,有一件重要的事情要注意,就是使用一个合适的误差度量值,有时会对学习算法造成 ...

  4. 斯坦福大学公开课机器学习:advice for applying machine learning | model selection and training/validation/test sets(模型选择以及训练集、交叉验证集和测试集的概念)

    怎样选用正确的特征构造学习算法或者如何选择学习算法中的正则化参数lambda?这些问题我们称之为模型选择问题. 在对于这一问题的讨论中,我们不仅将数据分为:训练集和测试集,而是将数据分为三个数据组:也 ...

  5. 斯坦福大学公开课机器学习: machine learning system design | error analysis(误差分析:检验算法是否有高偏差和高方差)

    误差分析可以更系统地做出决定.如果你准备研究机器学习的东西或者构造机器学习应用程序,最好的实践方法不是建立一个非常复杂的系统.拥有多么复杂的变量,而是构建一个简单的算法.这样你可以很快地实现它.研究机 ...

  6. 斯坦福大学公开课机器学习: machine learning system design | prioritizing what to work on : spam classification example(设计复杂机器学习系统的主要问题及构建复杂的机器学习系统的建议)

    当我们在进行机器学习时着重要考虑什么问题.以垃圾邮件分类为例子.假如你想建立一个垃圾邮件分类器,看这些垃圾邮件与非垃圾邮件的例子.左边这封邮件想向你推销东西.注意这封垃圾邮件有意的拼错一些单词,就像M ...

  7. 斯坦福大学公开课机器学习:Neural Networks,representation: non-linear hypotheses(为什么需要做非线性分类器)

    如上图所示,如果用逻辑回归来解决这个问题,首先需要构造一个包含很多非线性项的逻辑回归函数g(x).这里g仍是s型函数(即 ).我们能让函数包含很多像这的多项式,当多项式足够多时,那么你也许能够得到可以 ...

  8. 斯坦福大学公开课机器学习:advice for applying machine learning - deciding what to try next(设计机器学习系统时,怎样确定最适合、最正确的方法)

    假如我们在开发一个机器学习系统,想试着改进一个机器学习系统的性能,我们应该如何决定接下来应该选择哪条道路? 为了解释这一问题,以预测房价的学习例子.假如我们已经得到学习参数以后,要将我们的假设函数放到 ...

  9. 斯坦福大学公开课机器学习: advice for applying machine learning | deciding what to try next(revisited)(针对高偏差、高方差问题的解决方法以及隐藏层数的选择)

    针对高偏差.高方差问题的解决方法: 1.解决高方差问题的方案:增大训练样本量.缩小特征量.增大lambda值 2.解决高偏差问题的方案:增大特征量.增加多项式特征(比如x1*x2,x1的平方等等).减 ...

随机推荐

  1. js splice vs slice

    js splice vs slice https://stackoverflow.com/questions/37601282/javascript-array-splice-vs-slice htt ...

  2. DAY02、正式介绍python

    一.编程语言介绍(***) 1.1.机器语言:直接用计算机能理解的二进制指令编写程序,直接控制硬件 1.2.汇编语言:用英文标签取代二进制指令编写程序,本质也是直接控制硬件 1.3.高级语言:用人类能 ...

  3. Python——列表操作

    一.列表中所有元素出现的次数,并输出为字典模式 def count_list(list): b_list = {} for i in set(list): b_list[i] = list.count ...

  4. 为WebRTC 应用部署Turn Server

    部署WebRTC 或 SIP p2p 方案时经常会遇到p2p 无法穿透的环境, 这时就是TunServer 的用武之地了. 这里我们使用turnserver-0.7.3 下载confuse依赖库 wg ...

  5. PlaNet,使用图像输入来学习世界模型

    Google AI团队与DeepMind合作,上周宣布了一个名为PlaNet的新的开源“Deep Planning”网络. PlaNet是一个人工智能代理,它只使用图像输入来学习世界模型,并使用这些模 ...

  6. jsp页面中 <%%> <%! %>, <%=%> <%-- --%>有什么区别

    <%%> 可添加java代码片段   <%! %>       可添加java方法   <%=%>       变量或表达式值输出到页面 <%-- --%&g ...

  7. Python中csv模块解析

    导入模块 import csv 2.读取csv文件 file1 = open('test1.csv', 'rb') reader = csv.reader(file1) rows = [row for ...

  8. The Cow Lexicon POJ - 3267 dp

    题意  给出一个母串  和一个字典 问母串最少删去几个字母     删去后的母串是由字典里面的单词拼起来的 思路:dp[i]表示从i到母串结尾最少需要删除多少个字母  初始化dp[length]=0 ...

  9. 【Sichuan 2017D】Dynamic Graph

    题意 300个点的无环图,开始都是白色,每次改变某个节点的颜色(黑/白),问有多少对白点之间存在只有白点的路径. 题解 类似floyd,求出两点之间的路径条数.然后白到黑就删去对应路径,黑到白就增加对 ...

  10. 自学Python3.6-算法 二分查找算法

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...