一、引言

1. 机器学习的定义

Tom Mitchell定义的机器学习是,一个程序被认为能从经验E中学习,解决任务T,达到性能度量值P,当且仅当,有了经验E后,经过P评判,程序在处理T时的性能有所提升。(经验E就是程序上万次的自我练习的经验而任务T 就是下棋。性能度量值P呢,就是它在与一些新的对手比赛时,赢得比赛的概率。)

2. 监督学习

一个学生从波特兰俄勒冈州的研究所收集了一些房价的数据。你把这些数据画出来,看起来是这个样子:横轴表示房子的面积,单位是平方英尺,纵轴表示房价,单位是千美元。那基于这组数据,假如你有一个朋友,他有一套750平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖多少钱。

那么关于这个问题,机器学习算法将会怎么帮助你呢?

我们应用学习算法,可以在这组数据中画一条直线,或者换句话说,拟合一条直线,根据这条线我们可以推测出,这套房子可能卖$150,000,当然这不是唯一的算法。可能还有更好的,比如我们不用直线拟合这些数据,用二次方程去拟合可能效果会更好。根据二次方程的曲线,我们可以从这个点推测出,这套房子能卖接近$200,000。稍后我们将讨论如何选择学习算法,如何决定用直线还是二次方程来拟合。两个方案中有一个能让你朋友的房子出售得更合理。这些都是学习算法里面很好的例子。以上就是监督学习的例子。
可以看出, 监督学习指的就是我们给学习算法一个数据集。这个数据集由“正确答案”组成。在房价的例子中,我们给了一系列房子的数据,我们给定数据集中每个样本的正确价格,即它们实际的售价然后运用学习算法,算出更多的正确答案。比如你朋友那个新房子的价格。用术语来讲,这叫做回归问题。我们试着推测出一个连续值的结果,即房子的价格。

一般房子的价格会记到美分,所以房价实际上是一系列离散的值,但是我们通常又把房价看成实数,看成是标量,所以又把它看成一个连续的数值。

回归这个词的意思是,我们在试着推测出这一系列连续值属性。

再举另外一个监督学习的例子。我和一些朋友之前研究过这个。假设说你想通过查看病历来推测乳腺癌良性与否,假如有人检测出乳腺肿瘤,恶性肿瘤有害并且十分危险,而良性的肿瘤危害就没那么大,所以人们显然会很在意这个问题。

这个数据集中,横轴表示肿瘤的大小,纵轴上,我标出1和0表示是或者不是恶性肿瘤。我们之前见过的肿瘤,如果是恶性则记为1,不是恶性,或者说良性记为0。

我有5个良性肿瘤样本,在1的位置有5个恶性肿瘤样本。现在我们有一个朋友很不幸检查出乳腺肿瘤。假设说她的肿瘤大概这么大,那么机器学习的问题就在于,你能否估算出肿瘤是恶性的或是良性的概率。用术语来讲,这是一个分类问题

分类指的是,我们试着推测出离散的输出值:0或1良性或恶性,而事实上在分类问题中,输出可能不止两个值。比如说可能有三种乳腺癌,所以你希望预测离散输出0、1、2、3。0 代表良性,1 表示第1类乳腺癌,2表示第2类癌症,3表示第3类,但这也是分类问题。

因为这几个离散的输出分别对应良性,第一类第二类或者第三类癌症,在分类问题中我们可以用另一种方式绘制这些数据点。

现在我用不同的符号来表示这些数据。既然我们把肿瘤的尺寸看做区分恶性或良性的特征,那么我可以这么画,我用不同的符号来表示良性和恶性肿瘤。或者说是负样本和正样本现在我们不全部画X,良性的肿瘤改成用 O 表示,恶性的继续用 X 表示。来预测肿瘤的恶性与否。

在其它一些机器学习问题中,可能会遇到不止一种特征。举个例子,我们不仅知道肿瘤的尺寸,还知道对应患者的年龄。在其他机器学习问题中,我们通常有更多的特征,我朋友研究这个问题时,通常采用这些特征,比如肿块密度,肿瘤细胞尺寸的一致性和形状的一致性等等,还有一些其他的特征。这就是我们即将学到最有趣的学习算法之一。

那种算法不仅能处理2种3种或5种特征,即使有无限多种特征都可以处理。

3. 无监督学习

在无监督学习中,我们已知的数据。看上去有点不一样,不同于监督学习的数据的样子,即无监督学习中没有任何的标签或者是有相同的标签或者就是没标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。别的都不知道,就是一个数据集。你能从数据中找到某种结构吗?针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。是的,无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法。事实证明,它能被用在很多地方。

聚类应用的一个例子就是在谷歌新闻中。如果你以前从来没见过它,你可以到这个URL网址news.google.com去看看。谷歌新闻每天都在,收集非常多,非常多的网络的新闻内容。它再将这些新闻分组,组成有关联的新闻。所以谷歌新闻做的就是搜索非常多的新闻事件,自动地把它们聚类到一起。所以,这些新闻事件全是同一主题的,所以显示到一起。

二、单变量线性回归

Linear Regression with One Variable
以之前的房屋交易问题为例,假使我们回归问题的训练集(Training Set)如下表所示:

我们将要用来描述这个回归问题的标记如下:

m\ m m代表训练集中实例的数量

x\ x x代表特征/输入变量

y\ y y代表目标变量/输出变量

(x,y)\left(x, y\right)(x,y) 代表训练集中的实例

(x(i),y(i))\left(x^{(i)}, y^{(i)}\right)(x(i),y(i))代表第 个观察实例

h\ h h 代表学习算法的解决方案或函数也称为假设(hypothesis)

h的表达方式为:hθ(x)=θ0+θ1xh_{\theta}(x)=\theta_{0}+\theta_{1} xhθ​(x)=θ0​+θ1​x,因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题

1. 代价函数


接下来我们会引入一些术语我们现在要做的便是为我们的模型选择合适的参数(parameters) θ0\theta_{0}θ0​ 和 θ1\theta_{1}θ1​ ,在房价问题这个例子中便是直线的斜率和在y\ y y轴上的截距。

我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)

我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即使得代价函数 J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}J(θ0​,θ1​)=2m1​∑i=1m​(hθ​(x(i))−y(i))2最小。

我们绘制一个等高线图,三个坐标分别为θ0\theta_{0}θ0​ 和 θ1\theta_{1}θ1​和 J(θ0,θ1)J\left(\theta_{0}, \theta_{1}\right)J(θ0​,θ1​)

则可以看出在三维空间中存在一个使得J(θ0,θ1)J\left(\theta_{0}, \theta_{1}\right)J(θ0​,θ1​)最小的点。
代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。
下面直观的理解一下代价函数:

Hypothesis: hθ(x)=θ0+θ1x\begin{array}{c}{\text { Hypothesis: }} {h_{\theta}(x)=\theta_{0}+\theta_{1} x}\end{array} Hypothesis: hθ​(x)=θ0​+θ1​x​
Parameters: θ0,θ1{\text { Parameters: }} {\theta_{0}, \theta_{1}} Parameters: θ0​,θ1​

cost Function: J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2\begin{array}{l}{\text { cost Function: }}{J\left(\theta_{0}, \theta_{1}\right)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}} \end{array} cost Function: J(θ0​,θ1​)=2m1​∑i=1m​(hθ​(x(i))−y(i))2​

Goal: minimize:J(θ0,θ1)\\ {\text { Goal: minimize:} J\left(\theta_{0}, \theta_{1}\right)} Goal: minimize:J(θ0​,θ1​)

(1)θ1=0时(1)\theta_{1}=0时(1)θ1​=0时
J(0)=12m(12+22+32)=16⋅14≈2.3\begin{aligned} J(0) =\frac{1}{2 m}\left(1^{2}+2^{2} +3^{2}\right) =\frac{1}{6} \cdot 14 \approx 2.3 \end{aligned}J(0)=2m1​(12+22+32)=61​⋅14≈2.3​
(2)θ1=0.5时(2)\theta_{1}=0.5时(2)θ1​=0.5时
J(0.5)=12m((0.5)2+12+(1.5)2)=16⋅3.5≈0.58\begin{aligned} J(0.5) =\frac{1}{2 m}\left((0.5)^{2}+1^{2} +(1.5)^{2}\right) =\frac{1}{6} \cdot 3.5 \approx 0.58 \end{aligned}J(0.5)=2m1​((0.5)2+12+(1.5)2)=61​⋅3.5≈0.58​
(3)θ1=1时(3)\theta_{1}=1时(3)θ1​=1时
J(1)=12m(02+02+02)=16⋅0≈0\begin{aligned} J(1) =\frac{1}{2 m}\left(0^{2}+0^{2} +0^{2}\right) =\frac{1}{6} \cdot 0 \approx 0\end{aligned}J(1)=2m1​(02+02+02)=61​⋅0≈0​

由此我们可以得出右边图中的曲线。当然这里,我们是默认θ0=0\theta_{0}=0θ0​=0的。在下面我们将继续讨论θ0\theta_{0}θ0​ ≠0时候的曲线。

代价函数的样子,等高线图,则可以看出在三维空间中存在一个使得J(θ0,θ1)J\left(\theta_{0}, \theta_{1}\right)J(θ0​,θ1​)最小的点。
下面的图形是代价函数的轮廓图。右边的图中每个圆圈上面所代表的θ0\theta_{0}θ0​ 和 θ1\theta_{1}θ1​的值是不同的,但是代价函数J(θ0,θ1)J\left(\theta_{0}, \theta_{1}\right)J(θ0​,θ1​)的值是一样的。左图代表右图我们选择的θ0\theta_{0}θ0​ 和 θ1\theta_{1}θ1​所构成的预测函数的图形hθ(x)h_{\theta}(x)hθ​(x)的图形,

通过这些图形,我希望你能更好地理解这些代价函数J\ J J所表达的值是什么样的,它们对应的假设是什么样的,以及什么样的假设对应的点,更接近于代价函数J\ J J的最小值。

当然,我们真正需要的是一种有效的算法,能够自动地找出这些使代价函数J\ J J取最小值的参数θ0\theta_{0}θ0​ 和 θ1\theta_{1}θ1​来

2. 梯度下降

如果不懂什么是梯度的话,参考我的这篇文章 : 方向导数、梯度与梯度下降

梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ0,θ1)J\left(\theta_{0}, \theta_{1}\right)J(θ0​,θ1​)的最小值。
梯度下降背后的思想是:开始时我们随机选择一个参数的组合(θ0,θ1,…,.,,θn)\left(\theta_{0}, \theta_{1}, \ldots, .,, \theta_{n}\right)(θ0​,θ1​,…,.,,θn​),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。

想象一下你正站立在山的这一点上,站立在你想象的公园这座红色山上,在梯度下降算法中,我们要做的就是旋转360度,看看我们的周围,并问自己要在某个方向上,用小碎步尽快下山。这些小碎步需要朝什么方向?如果我们站在山坡上的这一点,你看一下周围,你会发现最佳的下山方向,你再看看周围,然后再一次想想,我应该从什么方向迈着小碎步下山?然后你按照自己的判断又迈出一步,重复上面的步骤,从这个新的点,你环顾四周,并决定从什么方向将会最快下山,然后又迈进了一小步,并依此类推,直到你接近局部最低点的位置。

批量梯度下降(batch gradient descent)算法的公式为:
repeat until convergence {θj:=θj−α∂∂θjJ(θ0,θ1)(for j=0and j=1)}\begin{array}{l}{\text { repeat until convergence }\{ } \\ {\theta_{j} :=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J\left(\theta_{0}, \theta_{1}\right) \quad(\text { for } j=0 \text { and } j=1)} \\ {\}}\end{array} repeat until convergence {θj​:=θj​−α∂θj​∂​J(θ0​,θ1​)( for j=0 and j=1)}​

Correct: Simultaneous update temp0 :=θ0−α∂∂θ0J(θ0,θ1)temp1:=θ1−α∂∂θ1J(θ0,θ1)θ0:=temp⁡0θ1:=temp1 \begin{array}{l}{\text { Correct: Simultaneous update }} \\ {\text { temp0 } :=\theta_{0}-\alpha \frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right)} \\ {\text { temp1} :=\theta_{1}-\alpha \frac{\partial}{\partial \theta_{1}} J\left(\theta_{0}, \theta_{1}\right)} \\ {\theta_{0} :=\operatorname{temp} 0} \\ {\theta_{1} :=\text { temp1 }}\end{array} Correct: Simultaneous update  temp0 :=θ0​−α∂θ0​∂​J(θ0​,θ1​) temp1:=θ1​−α∂θ1​∂​J(θ0​,θ1​)θ0​:=temp0θ1​:= temp1 ​

在梯度下降算法中,我们要更新θ0\theta_{0}θ0​ 和 θ1\theta_{1}θ1​,当 j=0j=0j=0 和 j=1j=1j=1 时,会产生更新,所以你将更新J(θ0)J\left(\theta_{0}\right)J(θ0​)和J(θ1)J\left(\theta_{1}\right)J(θ1​)。在这个表达式中,如果你要更新这个等式,你需要同时更新θ0\theta_{0}θ0​ 和 θ1\theta_{1}θ1​,我的意思是在这个等式中,我们要这样更新:

θ0\theta_{0}θ0​ := θ0\theta_{0}θ0​ ,并更新θ1\theta_{1}θ1​:= θ1\theta_{1}θ1​。

:=表示赋值, α\alphaα表示学习率(learning rate),它控制我们以多大的速率更新θj\theta_{j}θj​

实现方法是:你应该计算公式右边的部分,通过那一部分计算出θ0\theta_{0}θ0​ 和 θ1\theta_{1}θ1​的值,然后同时更新θ0\theta_{0}θ0​ 和 θ1\theta_{1}θ1​。

在梯度下降算法中,这是正确实现同时更新的方法。我不打算解释为什么你需要同时更新,同时更新是梯度下降中的一种常用方法,更自然的实现方法。当人们谈到梯度下降时,他们的意思就是同步更新。

如果你熟悉偏导数和导数,这其实就是这个微分项:
α∂∂θ0J(θ0,θ1),α∂∂θ1J(θ0,θ1)\alpha \frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right), \alpha \frac{\partial}{\partial \theta_{1}} J\left(\theta_{0}, \theta_{1}\right) α∂θ0​∂​J(θ0​,θ1​),α∂θ1​∂​J(θ0​,θ1​)

下面我们更直观地感受一下这个算法是做什么的,以及梯度下降算法的更新过程有什么意义。梯度下降算法如下:
θj:=θj−α∂∂θjJ(θ)\theta_{j} :=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta) θj​:=θj​−α∂θj​∂​J(θ)
描述:对θ\thetaθ赋值,使得J(θ)J\left(\theta\right)J(θ)按梯度下降最快方向进行,一直迭代下去,最终得到局部最小值。其中α\alphaα是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方向向下迈出的步子有多大

求导的目的:取这个红点的切线,刚好与函数相切于这一点,这条直线的斜率正好是这个三角形的高度除以这个水平长度,这条线有一个正斜率,也就是说它有正导数,因此,我得到的新的θ1\theta_{1}θ1​, θ1\theta_{1}θ1​更新后等于θ1\theta_{1}θ1​减去一个正数乘以α\alphaα。

如果太小或太大会出现什么情况:

  1. 如果α\alphaα太小的话,可能会很慢,因为它会一点点挪动,它会需要很多步才能到达全局最低点。
  2. 如果α\alphaα太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,下一次迭代又移动了一大步,越过一次,又越过一次,一次次越过最低点,直到你发现实际上离最低点越来越远,所以,如果太大,它会导致无法收敛,甚至发散。

如果我们预先把θ1\theta_{1}θ1​放在一个局部的最低点,你认为下一步梯度下降法会怎样工作?

假设你将θ1\theta_{1}θ1​初始化在局部最低点,在这儿,它已经在一个局部的最优处或局部最低点。结果是局部最优点的导数将等于零,因为它是那条切线的斜率。这意味着你已经在局部最优点,它使得θ1\theta_{1}θ1​不再改变,也就是新的θ1\theta_{1}θ1​等于原来的θ1\theta_{1}θ1​,因此,如果你的参数已经处于局部最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。这也解释了为什么即使学习速率α\alphaα保持不变时,梯度下降也可以收敛到局部最低点。

       首先初始化我的梯度下降算法,在那个品红色的点初始化,更新一步梯度下降,也许它会带我到这个绿色的点,再更新一步,你会发现斜率,是没那么陡的。随着接近最低点,导数越来越接近零,所以,梯度下降一步后,新的导数会变小一点点。然后再梯度下降一步,在这个绿点,自然会用一个稍微跟刚才在那个品红点时比,再小一点的一步,到了新的红色点,更接近全局最低点了,因此这点的导数会比在绿点时更小。所以再进行一步梯度下降时,导数项是更小的,θ1\theta_{1}θ1​更新的幅度就会更小。随着梯度下降法的运行,移动的幅度会自动变得越来越小,直到最终移动幅度非常小,你会发现,已经收敛到局部极小值。

CS229学习笔记(1)引言、单变量线性回归相关推荐

  1. 【吴恩达机器学习】学习笔记——2.1单变量线性回归算法

    1 回顾 1.1 监督学习 定义:给定正确答案的机器学习算法 分类: (1)回归算法:预测连续值的输出,如房价的预测 (2)分类算法:离散值的输出,如判断患病是否为某种癌症 1.2 非监督学习 定义: ...

  2. TensorFlow学习笔记03:单变量线性回归

    文章目录 机器学习系统 一.监督式学习基本概念 1.标签与特征 2.样本与模型 3.训练

  3. 吴恩达机器学习之单变量线性回归实现部分

    C++实现 代码实现 "linear_regression.h" //单变量线性回归模型 struct elem_var1 {double x, y; //训练集元素数据:自变量. ...

  4. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

  5. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

  6. 【吴恩达机器学习笔记】1引言、单变量线性回归、线性代数回顾

    1引言(Introduction) 1.1欢迎(Welcome) 1.2机器学习是什么(What is machine learning?) Arthur Samuel(1959):机器学习是在没有进 ...

  7. 斯坦福大学吴恩达机器学习教程中文笔记——week1——引言,单变量线性回归,线性代数回顾

    第1周 文章目录 第1周 @[toc] 引言(Introduction) 1.1 欢迎 1.2 机器学习是什么? 1.3 监督学习 1.4 无监督学习 二.单变量线性回归(Linear Regress ...

  8. 吴恩达机器学习ex1-matlab版学习总结笔记-(1)单变量线性回归

    作业任务项一:5*5矩阵A 代码如下: A=eye(5); eye()是单位矩阵,除了对角线为1,其余项都为0.5为矩阵维度,即生成5*5矩阵. 作业任务项二:单变量线性回归预测 代码如下: data ...

  9. Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”

    Coursera公开课笔记: 斯坦福大学机器学习第二课"单变量线性回归(Linear regression with one variable)" 发表于 2012年05月6号 由 ...

最新文章

  1. Java 重写(Override)与重载(Overload)
  2. 《从问题到程序:用Python学编程和计算》——3.4 定义函数
  3. A02 创建实验环境快照
  4. VoiceConvert/音频格式快速转换
  5. Qt工作笔记-QFileSystemModel创建文件系统信息模型
  6. 信息学奥赛C++语言: 素数个数
  7. 将物体固定在坐标某个点_坐标变换(2)—不同坐标系下的变换
  8. Android Mms 数据库
  9. 力扣题目——235. 二叉搜索树的最近公共祖先
  10. 如何将浮点数点左边的数每三位添加一个逗号,如12000000.11转化为『12,000,000.11』...
  11. 茆诗松概率论与数理统计持续更新中...
  12. power design设计数据库
  13. 推动工业品B2B企业转型:整合制造工业电商平台解决方案
  14. 清空RMON统计的数据
  15. MATLAB | 一文解决各类曲面交线绘制,包含三维隐函数曲面交线
  16. TP6框架全新开发社区系统源码开源
  17. 基于RedHat6.5的Greenplum环境配置
  18. 链上数据分析—NFT 项目质量评估
  19. STM32F429第九篇之stm32f4xx_hal_rcc_ex
  20. 嵌入式AI —— 6. 为糖葫芦加糖,浅谈深度学习中的数据增广

热门文章

  1. RIA and volta
  2. SpringCloud学习指南【更新】
  3. MySQL5.7 踩坑实录
  4. HTML5_增强可访问性和解决IE兼容性问题
  5. 如何用T—SQL命令查询一个数据库中有哪些表?
  6. (二)元学习算法MAML简介及代码分析
  7. C/C++的memset函数的说明和使用
  8. c语言规定学号长度,c语言第1-9章基本概念练习题ans(最全).docx
  9. 请领导审阅并提意见应怎么说_成功的领导是怎样跟下属沟通的?在交谈的时候,应当注意这三点...
  10. android nds模拟器窗口,安卓NDS模拟器drastic模拟器使用经验分享