跟着Andrew Ng挑战Machine Learning:第一周 —— 概念+单一变量线性回归

声明:

  开个新坑,督促自己坚持学习。这个系列同样是学习心得以及总结,用到的资料都是从吴恩达大神在Coursera上的课程中摘下来的。另外,依照Coursera的要求,保证学员的学习质量,在这一系列心得中不会出现与Coursera习题答案有关的代码。

  为了帮助自己更深刻的理解,除了一些人名、引用或者算法的缩写,比如‘BFGS’、‘L-BFGS’等等之外,尽量使用中文。这一系列的文章结构都是按照大神的课程来的,理解成翻译其实也没毛病。


什么是机器学习?

  有很多种说法,大致意思都是:“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。”

  下面是一种较常见的引用,不明觉厉,仅是应用的话并不用纠结于定义。

A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.

  通常来说,机器学习主要分为监督学习(Supervised Learning)和非监督学习(Unsupervised Learning)。事实上最近我还看到的半监督学习(Semi-supervised Learning),等以后确实了解了再总结一下。


监督学习

  监督学习应具备几个特点,即有一个用于训练(Training)的数据集合,并且明确的知道正确的输出结果应该是怎样的形势,而且清楚的知道训练集的数据与输出结果之间的关系。简而言之,当涉及到“训练”的时候八九不离十就是监督学习了

  监督学习又进一步被分为两类问题,分别是“回归问题(Regression)”和“分类问题(Classification)”。这两类问题主要是由输出的结果进行区分:“回归问题”的输出结果应该是一个连续的函数,比如,根据房屋面积预测房价(实际上和房价有关的特征并不仅仅是面积);“分类问题”的输出结果应该是离散,比如,根据肿瘤的大小预测该肿瘤是恶性的还是良性的。


非监督学习

  通过非监督学习我们可以解决一些我们并不清楚其结果应该是怎想的问题。通过聚类(Clustering)或者说是归纳的方法,我们可以发现特征变量(Variables)和数据集之间的某些关系。

  例:对于基因序列的研究,通过非监督学习,我们可以发现某些基因片段与生命延长、遗传疾病、性格特征……等表现形式之间关系。


模型表示

  概念讲完了,接下来首先学习“监督学习”。开始具体的学习之前需要对符号做一些规定和说明。对于接下来的课程我们做如下规定,以根据房屋面积预测房价为例:

  x(i):输入变量(输入特征),可以是一个向量。

  X:表示输入特征的集合。

  y(i):输出变量(目标变量),在此例中我们用y(i)表示x(i)对应的预期房价。

  Y:表示输出集合。

  (x(i),y(i)):表示一个训练实例。

  m:表示训练实例的总数。

  h(x):要拟合(Fitting)的函数,由于历史的原因我们称h(x)为假设(Hypothesis),由于我不清楚最标准的翻译是什么,以后只用符号来表示好了。

  

  J(θ0,θ1,...,θn):成本函数,或者说时损失函数。

  α:学习速率。

  

  为了更好的理解监督学习,我们可以说,实际上监督学习的目的就是通过学习大量经验数据找到一个“合适”的预测函数进行预测,即h:x→y来表示这个函数。学习的过程可由下图大致表示:

  

 

  当我们用h(x)来预测y时,若y为连续型变量,那么这就是一个“回归问题”;若y为离散变量,则这是一个“分类问题”。


成本函数

  成本函数的功能是用于表示h(x)的合适程度,也就是预测的精确度。在当前的例子中,表示为:

  

J(θ0,θ1)=12m∑i=1m(y^i?yi)2=12m∑i=1m(h(xi)?yi)2

  容易看出,这个公式和“方差”很像,仅仅多了一个(12)而已。实际上,此处有没有(12)都不影响成本函数所表示的意义,可以直接把成本函数当成方差看待。加上(12)的目的是为了让后文所讲的“梯度下降”算法更容易计算而已。通过下图可以更加直观的理解:

  

 

  “x”表示训练实例,J(θ0,θ1)即可以理解为图中所有红色垂直线段长度之和。由此很容易理解,拟合度最高的h(x),其(θ0,θ1)对应的J(θ0,θ1)必然是minJ(θ)。


更加直观的理解成本函数

  最理想的情况,所有的训练实例都在一条直线上,如图,此时θ1=1,θ0=0,J(θ0,θ1)=0。

 

  假设θ0并不做变化,仅θ1变化时,我们可以很容易的得到这样一个规律:当θ1越大时,J(θ0,θ1)越大;当θ1越小时,J(θ0,θ1)越小,如下图。可以看出,当θ1取1时,J(θ1)为0,对应的h(x)就是我们所期望的结果。

 

  当θ0,θ1一起变化时,我们可以做一个三维的图来表示,或者做一个二维的等高线图进行表示:以θ0为x轴,θ1为y轴,J(θ0,θ1)的值用不同的颜色进行表示,如下右图。在此前提下来理解有两个特征变量的情况下的最佳h(x)。

 

  左图中的斜线为右图中点(θ0,θ1)=(800,?0.15)对应的h(x),很明显h(x)与训练集拟合的效果并不好。

 

  上图更进一步,选择的点距中心更近了一步(θ0,θ1)=(360,0),事实上拟合的效果也很差,即使严格意义上来说进步了。

 

  这一次,我们选到了中心,可以看到中心点对应的h(x)拟合效果较好,与训练集的分布趋势大致相同。那么,计算机是怎么实现逐渐向中心点靠拢的呢?


梯度下降算法

注:这一部分如果有微积分相关的知识就很容易理解了,如果没有相关知识也没关系,并不会影响实际得应用。

  根据前文的内容,我们知道最合适的h(x)其对应的J(θ0,θ1)的值最小,即J(θ0,θ1)=minJ(θ0,θ1)。梯度下降算法的目的是使J(θ0,θ1)能够按下降最快的方向(即梯度方向)收敛于极小值。如下图:

  

 

注:上图所示的情况得到的极小值和其初始状态有关,不一定就是minJ(θ,θ),只有凸函数(convex function)得到的极小值才是全局的最小值,。

核心算法

重复做如下动作至J(θ0,θ1)收敛 :

θj:=θj?α??θjJ(θ0,θ1)

 “:=”表示赋值的意思。

  由于这一章只讨论单一变量的线性回归问题,所以 j∈0,1。需要注意的是,θj需要同时更新。如果没有同时更新,结果即使正确,也只是因为运气。

  α为前文介绍的学习速率,所以当α越大下降的幅度越大,反之则越小。确定α并不是一个容易的事情,如果α的值过小,虽然一定可以收敛,但是消耗的时间将会很长;如果α的值过大,则很有可能无法收敛,通过下图就可以直观的理解这两种情况。

  

 


梯度下降算法在单一变量线性回归中的应用

确定特征(θ0,θ1)并不复杂:

  1. hθ(x)=θ0+θ1x1
  2. 重复至收敛 {

    ?????????????θ0:=θ0?α1m∑i=1m(hθ(xi)?yi)θ1:=θ1?α1m∑i=1m((hθ(xi)?yi)xi)

    }

θj推导:

 

  在括号中θ0,θ1已经分开,如果我们假设x0=1那么θ0也可以写成θ1的形势,这其实就是下一篇多重变量回归问题的公式了。

  

  另外,需要提一下,这种同一时间同时更新所有的特征变量θi的方式叫做批量梯度下降(Batch Gradient Descent)。下面是一张实际运行的结果图,帮助直观的理解梯度下降算法。

  

  

  

时间: 2025-01-02 03:45:27

跟着Andrew Ng挑战Machine Learning:第一周 —— 概念+单一变量线性回归的相关文章

Andrew Ng 的 Machine Learning 课程学习 (week4) Multi-class Classification and Neural Networks

这学期一直在跟进 Coursera上的 Machina Learning 公开课, 老师Andrew Ng是coursera的创始人之一,Machine Learning方面的大牛.这门课程对想要了解和初步掌握机器学习的人来说是不二的选择.这门课程涵盖了机器学习的一些基本概念和方法,同时这门课程的编程作业对于掌握这些概念和方法起到了巨大的作用. 课程地址 https://www.coursera.org/learn/machine-learning 笔记主要是简要记录下课程内容,以及MATLAB

Andrew Ng 的 Machine Learning 课程学习 (week5) Neural Network Learning

这学期一直在跟进 Coursera上的 Machina Learning 公开课, 老师Andrew Ng是coursera的创始人之一,Machine Learning方面的大牛.这门课程对想要了解和初步掌握机器学习的人来说是不二的选择.这门课程涵盖了机器学习的一些基本概念和方法,同时这门课程的编程作业对于掌握这些概念和方法起到了巨大的作用. 课程地址 https://www.coursera.org/learn/machine-learning 笔记主要是简要记录下课程内容,以及MATLAB

[C5] Andrew Ng - Structuring Machine Learning Projects

About this Course You will learn how to build a successful machine learning project. If you aspire to be a technical leader in AI, and know how to set direction for your team's work, this course will show you how. Much of this content has never been

Logistic回归Cost函数和J(θ)的推导----Andrew Ng【machine learning】公开课

最近翻Peter Harrington的<机器学习实战>,看到Logistic回归那一章有点小的疑问. 作者在简单介绍Logistic回归的原理后,立即给出了梯度上升算法的code:从算法到代码跳跃的幅度有点大,作者本人也说了,这里略去了一个简单的数学推导. 那么其实这个过程在Andrew Ng的机器学习公开课里也有讲到.现在回忆起来,大二看Andrew的视频的时候心里是有这么一个疙瘩(Andrew也是跳过了一步推导) 那么这里就来讲一下作者略去了怎样的数学推导,以及,怎么推导. 在此之前,先

Machine Learning第九周笔记

博客已经迁移到Marcovaldo's blog Andrew Ng在Machine Learning的第九周介绍了异常检测(anomaly detection)和推荐系统(recommender system),将笔记整理在下面. Anomaly Detection Density Estimation Problem Motivation 视频开头,Andrew Ng告诉我们,异常检测(anomaly detection)主要应用于无监督式学习,但它更像是监督式学习.我们以飞行器发动机为例来

Machine Learning笔记(三) 多变量线性回归

Machine Learning笔记(三) 多变量线性回归 注:本文内容资源来自 Andrew Ng 在 Coursera上的 Machine Learning 课程,在此向 Andrew Ng 致敬. 一.多特征(Multiple Features) 笔记(二)中所讨论的房价问题,只考虑了房屋尺寸(Size)一个特征,如图所示: 这样只有单一特征的数据,往往难以帮助我们准确的预测房价走势.因此,考虑采集多个特征的数据值,往往能提升预测效果.例如,选取如下4个特征作为输入值时的情况: 对一些概念

机器学习001 deeplearning.ai 深度学习课程 Neural Networks and Deep Learning 第一周总结

Deep Learning Specialization 吴恩达老师最近在coursera上联合deeplearning.ai 推出了有关深度学习的一系列课程,相对于之前的machine learning课程,这次的课程更加实用,作业语言也有matlab改为了python从而更加贴合目前的趋势.在此将对这个系列课程做一个学习笔记. 而这次的Deep Learning Specialization分为五门课程,分别为:Neural Networks and Deep Learning,Improv

CS281: Advanced Machine Learning 第一节

接触机器学习领域有一段时间了,跟过不少基础的课程,也看过一些入门的书籍和论文,现在想通过一门公开课系统的进入机器学习的领域,所以选择了advanced Machine Learning,这是哈佛大学的一门高级机器学习公开课,主要教材选用的是kevin Murphy Machine Learning: A Probabilistic Perspective, MIT Press 以及Christopher M. Bishop, Pattern Recognition and Machine Lea

Andrew Ng机器学习公开课第一节笔记

课程主页,亲测能上,有好些材料 http://cs229.stanford.edu/ Andrew讲的比较早的机器学习应用,1958年有人用来训练一个会下国象的电脑,这个有机会可以试一下,训练一个会下中国象棋的. 介绍了有监督的学习(supervised)和无监督的学习型算法(unsupervised) 有监督是有标准答案集来反馈的训练,无监督的就是没有标准答案的通过算法从数据本身结构决定谁是谁 两类问题:回归问题和分类问题 回归问题针对那些描述数据的值或结果是连续的情况,分类问题针对不连续的情