机器学习之Andrew Ng课程复习--- 怎样选择机器学习方法、系统

2024-01-27 16:08

本文主要是介绍机器学习之Andrew Ng课程复习--- 怎样选择机器学习方法、系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     通过Ng公开课前些章节的学习,我们已经掌握了部分机器学习算法,可是怎么样选择合适的算法去解决自己的问题,构建属于自己的机器学习系统呢?Ng第六堂课给了我们答案。

     Ng的关注重点是:假如你在开发一个机器学习系统,或者试着改进一个机器学习系统时,你应该如何决定接下来应该如何做。为了解释这个过程,我们仍然使用预测房价的例子,假设我们已经实现了用规则化的线性回归方法预测房价:


这个就是最小化代价函数J(θ),在你得到你的学习参数以后,但发现该预测应用于一个新的训练数据上时有很大误差(error),(有可能是过拟合)这时候你想改进该算法,应采取一些解决方案:

Get more training examples

Try smaller sets of features

Try getting additional features

Try adding polynomial features (e.g.  x1^2, x2^2,x1x2...)

Try decreasing λ

Try increasing λ

     这么多方法,人们应该选择哪一个或者哪几个方法去改进现有的算法呢,通常大多数人们都随机选择一个或者几个进行尝试,盲目随机,走了很多弯路,其实存在科学的方法帮大家从以上几种方法中去除几个,留下似乎很有前途的方法,从而节省大量的时间。接下来的俩小结,分别从怎么样评估机器学习算法的性能,和讨论机器学习诊断法入手。

Machine Learning 方法的诊断:

- 什么是诊断Dignostic呢?诊断就是能够判断一种学习算法能不能work,并且改善该算法性能的一个测试。

Diagnostic: A test that you can run to gain insight whatis/isn't working with a learning algorithm, and gain guidance as to how best toimprove its performance.

-诊断的效果:Diagnostics can take time to implement, but doingso can be a very good use of your time.




评价方法假设——Evaluating a hypothesis

    在过去,我们确定学习算法的参数时,我们考虑的是选择参数使得训练误差最小化,有人认为得到训练误差最小一定是一个好事,但事实证明,仅仅是训练误差最小不一定是一个好的假设,有可能过拟合,那么怎么证明或者发行过拟合现象的出现呢。画图仅仅适合低纬的假设,那么我们需要另外一种评价假设的方法,如下给出了一种评价假设的标准方法。

    首先呢,我们将所有数据分为两个集合,一个Trainning set和一个Testing set,用Training set得到参数向量,用Testing set进行测试(比如分类)。(训练集和测试集都随机选取)

 


    我们已经知道了学习一个假设,我们需要costFunction在训练集上最小,现在我们需要CostFuntion在测试集上也能达到最小值,这样我们的模型理论上是最优的模型。(其实还是不公平、不准确的,因为我们在模型选择的时候就是利用测试集上的CF最小来确定的,模型确定以后,验证其泛化能力又用测试集来验证显然不公平,解决方法后面会讲)

这时,将test set的error分为线性回归linear regression和逻辑回归logistic regression两类

线性回归的error:


逻辑回归的error:



模型选择和训练、验证实验数据

    什么是模型选择?比如最适合你手中数据的多项式的次数是几次?怎么样选择正确的特征来构造学习算法,或者你要正确选择正则化参数中的lambda的值,你应该怎么做?This isModelSelection!!(终于找到了学习的热情,拼拼拼)

    面对模型选择问题,如何才能得到一个just fit的模型而不会导致underfit 或者overfit呢?(前面我已经讲了传统思维分数据集为训练和测试集已经不能为我们提供有效的方案)我们引入一类数据集,叫做cross validation set,即交叉验证数据集。将所有数据按<6,2,2>分为training set , crossvalidation set , testing set三类最典型的分配为(60% 20% 20%),如下图所示:


其error计算公式如下,其实三类计算方法大同小异,相同的公式只是换了数据及而已:


进行模型选择的方法其实很简单,对应下图大家来看:

-首先,建立d个model 假设(图中有10个,d表示其id),分别在trainingset 上求使其training error最小的θ向量,那么得到d个θ

-然后,对这d个model假设,带入θ,在crossvalidation set上计算J(cv),即cv seterror最小的一个model 作为 hypothesis,如下图中J(cv)在第4组中最小,便取d=4的假设。

PS: 其实d表示dimension,也就是维度,表示该hypothesis的最大polynomial项是d维的。

PS: 一般地,J(cv)是大于等于J(train)的

PS:为什么这么做?这样我们就为测试集数据留了一条路,因为它没有和假设拟合过,这样我们可以用它来评测模型的泛化能力。



区别诊断偏离bias和偏差(方差)variance


    当你运行一个学习到的算法时,出现效果不好,多半是因为以下俩种情况:1、偏离过大2、偏差过大。即欠拟合、过拟合。那么它俩哪个和欠拟合、哪个和过拟合有关呢,或者是俩者都相关?如果我们能判断出其算法的过拟合或者欠拟合的状态,对于我们改进算法很有帮助。

我们来看看下图:


我们给大家区分两个概念:bias vs. variance。如下图所示为error随不同dimension的model变化图,可以想见,随d上升是一个由underfit到overfit的过程,这个过程中,training set的error逐渐下降,而cv set的error先降后升。(详细解释请猛戳这里http://blog.csdn.net/ywl22/article/details/8606166)

 

上图显示

bias:J(train)大,J(cv)大,J(train)≈J(cv),bias产生于d小,underfit阶段;

variance:J(train)小,J(cv)大,J(train)<<J(cv),variance产生于d大,overfit阶段;


练习题:

 


模型选择和训练、验证实验数据

我们知道算法正则化可以避免过拟合,那么正则化和biasVariance有什么关系呢?下面我们深入研究下biasVariance是如何相互影响的,以及和算法的正则化之间的相互关系。

首先我们回忆下正则化, regularization就是为了防止overfit而在cost function中引入的一个分量。看下图吧,regularization项就是cost function J(θ)中的最后一项,其中λ太大导致underfit,λ太小导致overfit……


1显示,如果我们给lambda一个较大的值比如10000,那么相当于给参数θ一个较大的惩罚,这时候我们得到大θ将特别小,几乎约等于0h(θ) = θ0,这样我们学习得到的模型将欠拟合,即高bias

3显示,如果我们给lambda取一个较小的值,比如等于0(相当于没有正则化项)这时我们如果拟合一个高次多项式,如果没有正则化项或者正则化程度很小的时候,会造成过拟合,高Variance

2显示,显然,只有我们取一个合适的Lambda值,我们才能得到一组合理的参数θ,那么我们应该怎么样自动选择出一个最合适的正则化参数Lambda呢,

首先,将λ从00.01,一直往上每次乘以2,那么到10.24总共可以试12次λ。

12个λ会得到12model cost function,每个对应有J(θ) Jcv(θ).

和模型选择的方法相同,首先选出每个cost function下令J(θ)最小的θ,然后取出令Jcvθ)最小的一组定为最终的λ


练习题:




 

下图表示的是正则化参数lambdabiasVariance以及训练集、交叉验证集上损失函数的影响图。


λ太小导致overfit,产生variance,J(train)<<J(cv)

λ太大导致underfit,产生bias,J(train)≈ J(cv)

 

===============================

Learning Curves

什么时候增加训练数据training set才是有效的?

绘制学习曲线非常重要,也许你想检查你的学习算法运行是否一切正常,或者你想改进算法的表现或效果,那么学习曲线就是一种很好的工具,Ng经常用学习曲线来判断某一个学习算法是否处于偏差 方法的问题或是二者皆有,下面我们来看看如何绘制一条学习曲线。

    为了绘制一条学习曲线,通常先绘制出Jtrain 也就是训练数据集的平均误差平方和,

Jcv表示交叉验证集数据的平均误差平方和,我们要将其绘制成一个关于参数m的函数,也就是关于训练集样本总数的函数,所以m一般都是一个常数,但这里我们对m的取值做一些限制,比如取m为1,4,10,20,30,40几组数据然后绘制出训练集误差,其他样本选择性的忽略。从下图我们可以看到,当m很小的时候,训练误差非常小,因为训练集少,我们可以完全拟合这些少量的数据,但随着m的增大,拟合效果开始下降,即Jtrain开始增大。那么对应的交叉验证集误差呢?当训练集很小的时候,训练的模型泛化能力很差,不能很好地适应新样本,所以Jcv会随着m增大而减少,泛化能力增加。


我们分别就High Bias High Variance来看看学习曲线的变化,以及增加training set个数,即m,是否有意义?!

下图显示:Underfithighbias:增加m无济于事,因为模型本身就拟合的很差。


下图显示:OveryFitHighvariance:增加m使得JtrainJcv之间gap减少,有助于performance提高。


练习题:


综上:增加训练数据的个数对于过拟合是有用的,对于underfit是徒劳!

===============================

Deciding what to try next

我们已经学了怎么样评价一个机器学习系统的性能,模型选择中的bias、variance的意义、区别等,这些诊断方法如何帮助我们弄清哪些方法有助于改进学习算法的效果,哪些又是徒劳。让我们回到最初的例子,在那里找到答案。(如下图)


以上这些方案哪些可以帮助我们更好的改进算法。根据上节学习曲线图可以很快的给出答案。

最后我们回顾一下以上内容,并且看看它们和神经网络的联系,Ng给大家提供了一些很实用的经验和建议(神经网络建模的结构选择或者连接形式的一些技巧)

在神经网络拟合的时候你可以选择一种,比如说一个相对比较简单的神经网络模型(隐藏单元比较少),因为这样的神经网络,学习参数比较少,但很容易出现欠拟合,不过计算量相对应的也就较小。相反,复杂的神经网络结构复杂、有很多隐藏层,容易出现过拟合。但这种神经网络的优势是学习出的结果,性能会很好,但计算量很大。一般一个复杂的神经网络通过正则化修正过拟合后的结果要明显好于一个简单的神经网络的效果。但是隐藏层的选择通常也是一个困难的问题,经验是选择一个隐藏层比较合理。比如我们可以把数据分割成训练、验证、测试三个部分,然后分别计算不同隐藏层数的神经网络结构在验证集上的表现,从而来确定神经网络层数。


练习题:


    综上所述,选择最佳拟合model的问题,是machine learning的常见问题,以上内容可以帮助我们更好的选择一个最佳的模型,更好的应用到机器学习的应用中。


 

这篇关于机器学习之Andrew Ng课程复习--- 怎样选择机器学习方法、系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/650777

相关文章

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用