CS229笔记

Contents

1 Introduction

1.1 What is Machine Learning

ML :

  1. grew out of work in AI(产生于AI)
  2. new capability for computers

ML Examples:

  • data mining
    web click data
    medical records 帮助诊断
    biology 分析基因结构
    engineering
  • no need programming by hand
    autonomous helicopter (不知道如何写一段程序让直升机自己飞,我们唯一能做的就是让计算机自己学习如何驾驶直升机。 )
    handwriting recognition (现在我们能够非常便宜地把信寄到这个美国甚至全世界的原因之一就是当你写一个像这样的信封,一种学习算法已经学会如何读你信封,它可以自动选择路径,所以我们只需要花几个美分把这封信寄到数千英里外。 )
  • self-customizing programs (私人定制程序)
    如:使用软件过程中,系统会分析出偏好,进行推送
  • try to understand human learning and brain

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

ML Algorithms:

  • supervised learning 教计算机学习,有标签
  • unsupervised learning 计算机自主学习,无标签
  • 以上两种最常见,还有 reinforcement learning, recommendation system

1.2 Supervised Learning

example 1 :
在这里插入图片描述
应用学习算法,可以在这组数据中拟合一条直线,根据这条线可以推测出,这套房子可能卖$150,000,当然这不是唯一的算法。可能还有更好的,比如我们不用直线拟合这些数据,用二次方程去拟合可能效果会更好。这些都是学习算法里面很好的例子。以上就是监督学习的例子。
用术语来讲,这叫做回归问题。我们试着推测出一个连续值的结果,即房子的价格。

example 2:
在这里插入图片描述
我有 5 个良性肿瘤样本,在 1 的位置有 5 个恶性肿瘤样本。假设肿瘤大小已知,那么机器学习的问题就在于,你能否估算出肿瘤是恶性的或是良性的概率。用术语来讲,这是一个分类问题。

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

在其它一些机器学习问题中,可能会遇到不止一种特征。举个例子,我们不仅知道肿瘤的尺寸,还知道对应患者的年龄、肿块密度、肿瘤细胞尺寸的一致性和形状的一致性等等。

学习算法不仅能处理 2 种 3 种或 5 种特征,即使有无限多种特征都可以处理。
在这里插入图片描述
上图中,我列举了总共 5 种不同的特征,坐标轴上的两种和右边的 3 种,但是在一些学习问题中,你希望不只用 3 种或 5 种特征。相反,你想用无限多种特征,那你怎么处理无限多个特征,甚至怎么存储这些特征都存在问题,你电脑的内存肯定不够用。 以后会讲一个算法,叫支持向量机,里面有一个巧妙的数学技巧,能让计算机处理无限多个特征。想象一下,而是在一个无限长的列表里面,一直写一直写不停的写,写下无限多个特征,事实上,我们能用算法来处理它们。

  • conclusion
    回顾一下,这节课我们介绍了监督学习。其基本思想是,我们数据集中的每个样本都有相应的“正确答案”,再根据这些样本作出预测。
    我们还介绍了回归问题,推出一个连续的输出;介绍了分类问题,其目标是推出离散的结果。

1.3 Unsupervised Learning

如图:
在这里插入图片描述
在无监督学习中,我们已知的数据不同于监督学习的数据的样子,即无监督学习中没有任何的标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法。

聚类应用的一个例子就是在谷歌新闻中。谷歌新闻每天收集非常多的网络的新闻内容。它再将这些新闻分组,组成有关联的新闻,自动地把它们聚类到一起。所以,搜索关键词,这些新闻事件全是同一主题的,所以显示到一起。

无监督学习或聚集有着大量的应用:

  1. 社交网络分析
    所以已知你朋友的信息,比如你经常发 email 的,或是你 Facebook 的朋友、 微信的朋友,我们能否自动地给出朋友的分组呢?即同一组里的人们彼此都熟识,认识组里的所有人。
  2. 市场分割
    许多公司有大型的数据库,存储消费者信息。所以,你能检索这些顾客数据集,自动地发现市场类,并自动地把顾客划分到不同的细分市场中,从而更有效地进行销售。这也是无监督学习,因为我们拥有所有的顾客数据,但我们没有提前知道是什么的细分市场,以及分别有哪些我们数据集中的顾客。我们就必须让算法从数据中发现这一切。
  3. 天文数据分析
    最后,无监督学习也可用于天文数据分析,这些聚类算法给出了令人惊讶、有趣、有用的理论,解释了星系是如何诞生的。这些都是聚类的例子,聚类只是无监督学习中的一种。
  • cocktail party problem
    鸡尾酒宴问题。鸡尾酒宴只有两个人,他俩同时都在说话,我们放两个麦克风在房间中,因为这些麦克风在两个地方,离说话人的距离不同每个麦克风记录下不同的声音。算法可以区分出两个音频资源,这两个可以合成之前的录音。

2 Linear Regression with One Variable

2.1 Model Representation(模型表示)

小写的 m m m 来表示训练样本的数量
以房屋交易问题为例,假使我们回归问题的Training Set ,如下表所示:

Size(x) Price(y)
2104 460
1416 230
1534 315
852 178

m m m 代表训练集中实例的数量
x x x 代表特征/输入变量
y y y 代表目标变量/输出变量
( x x x, y y y) 代表训练集中的一个样本
( x ( i ) x^{(i)} x(i) , y ( i ) y^{(i)} y(i)) 代表第 i i i 个样本(特定的样本)
ℎ 代表学习算法的解决方案或函数也称为假设(hypothesis)

  • 监督学习算法的工作方式
    在这里插入图片描述

算法从训练集,学习出一个函数,通常表示为小写 ℎ表示。ℎ 代表 hypothesis( 假设),是一个函数。然后输入房屋尺寸size,输出价格。

那么,对于我们的房价预测问题,该如何表达 ℎ?
一种可能的表达方式为: h θ ( x ) = θ 0 + θ 1 x ℎ_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x,因为只含有一个特征/输入,所以叫作单变量线性回归。

2.2 Cost Function

现在要做的便是为我们的模型选择合适的参数(parameters) θ 0 \theta_0 θ0 θ 1 \theta_1 θ1,在房价问题这个例子中便是直线的斜率和在? 轴上的截距。选择的参数决定了得到的直线相对于训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)。
在这里插入图片描述
我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。 即,使得

代价函数 J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2,最小

绘制一个等高线图,三个坐标分别为 θ 0 , θ 1 , J ( θ 0 , θ 1 ) \theta_0,\theta_1,J(\theta_0,\theta_1) θ0,θ1,J(θ0,θ1)
在这里插入图片描述
可以看出在三维空间中存在一个使得 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1)最小的点

代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。我们之所以要求出误差的平方和,是因为误差平方代价函数,对于大多数问题,特别是回归问题,都是一个合理的选择。还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回归问题最常用的手段了。后续课程中,还会谈论其他的代价函数。

  • 矢量化(Vectorization)
    J ( θ ) = 1 2 m ( X θ − y ) T ( X θ − y ) J(\theta)=\frac{1}{2m}(X\theta-y)^T(X\theta-y) J(θ)=2m1(Xθy)T(Xθy)
    维度说明 X m × ( n + 1 ) X_{m\times(n+1)} Xm×(n+1), y m × 1 y_{m\times1} ym×1, θ ( n + 1 ) × 1 \theta_{(n+1)\times1} θ(n+1)×1

  • 代价函数的 Python 代码

def costfunc(X,y,theta):
    inner = np.power((X @ theta - y), 2)
    return np.sum(inner)/(2*len(X))

矢量化版本

def computeCost(X, y, theta):
    inner = (X@theta-y).T@(X@theta-y)
    return inner / (2 * len(X))

2.3 Cost Function Intuition(直观理解)

通过一些例子来获取一些直观的感受,看看代价函数到底是在干什么。

Hypothesis : h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x
Parameters : θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1
Cost Function : J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2
Goal : minimize J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代价函数的等高线图,可以看出在三维空间中存在一个使得J最小的点
在这里插入图片描述
我们不希望编个程序把这些点画出来,然后人工的方法来读出这些点的数值,这很明显不是一个好办法。我们会遇到更复杂、更高维度、更多参数的情况,而这些情况是很难画出图的,因此更无法将其可视化,因此我们需要的是一种有效的算法,能够自动地找出这些使代价函数 J J J 取最小值的参数 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1 来。

2.4 Gradient Descent

梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数 J ( θ 0 , θ 1 ) J(\theta_0,\theta_1) J(θ0,θ1) 的最小值。

算法思想:开始时我们随机选择一个参数的组合,计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到到一个局部最小值(local minimum),因为我们并没有尝试完所有的参数组合,所以不能确定我们得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。

批量梯度下降(batch gradient descent)算法的公式为:
repeat until convergence: θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) ( j = 0 , 1 ) \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1) \\ (j=0,1) θj:=θjαθjJ(θ0,θ1)(j=0,1)

其中 α \alpha α 是学习率(learning rate),它决定了我们沿着能让代价函数下降迈出的步子有多大,在批量梯度下降中,每一次都同时让所有的参数减去学习速率乘以代价函数的导数,即参数要同时更新。

correct : simultaneous update
t e m p 0 = θ 0 − α ∂ J ∂ θ 0 temp_0 = \theta_0-\alpha\frac{\partial J}{\partial{\theta_0}} temp0=θ0αθ0J t e m p 1 = θ 1 − α ∂ J ∂ θ 1 temp_1= \theta_1-\alpha\frac{\partial J}{\partial{\theta_1}} temp1=θ1αθ1J θ 0 : = t e m p 0 \theta_0:=temp_0 θ0:=temp0 θ 1 : = t e m p 1 \theta_1:=temp_1 θ1:=temp1
incorrect :
t e m p 0 = θ 0 − α ∂ J ∂ θ 0 temp_0 = \theta_0-\alpha\frac{\partial J}{\partial{\theta_0}} temp0=θ0αθ0J θ 0 : = t e m p 0 \theta_0:=temp_0 θ0:=temp0 t e m p 1 = θ 1 − α ∂ J ∂ θ 1 temp_1= \theta_1-\alpha\frac{\partial J}{\partial{\theta_1}} temp1=θ1αθ1J θ 1 : = t e m p 1 \theta_1:=temp_1 θ1:=temp1

2.5 Gradient Descent Intuition

在这里插入图片描述
对于这个问题,求导的目的,基本上可以说取这个红点的切线。现在,这条线有一个正斜率,也也就是说它有正导数,因此,我得到更新后的 θ 1 \theta_1 θ1,等于 θ 1 \theta_1 θ1减去一个正数乘以 α \alpha α

  • α \alpha α 太小或太大会出现什么情况:
  1. 如果 α \alpha α太小了,即我的学习速率太小,需要很多步才能到达最低点,会很慢。
  2. 如果 α \alpha α太大,那么梯度下降法可能会越过最低点,甚至可能无法收敛,甚至发散。所以,如果?太大,它会导致无法收敛,甚至发散。
  • 一个问题
    当我第一次学习这个地方时,我(Andrtew Ng)花了很长一段时间才理解这个问题,如果我们预先把 θ 1 \theta_1 θ1 放在一个局部的最低点,你认为下一步梯度下降法会怎样工作?
    假设你将 θ 1 \theta_1 θ1 初始化在局部最低点,在这儿,导数将等于零,因为它是那条切线的斜率。这意味着你已经在局部最优点,它使得 θ 1 \theta_1 θ1 不再改变,也就是新的 θ 1 \theta_1 θ1 等于原来的 θ 1 \theta_1 θ1 。因此,如果你的参数已经处于局部最低点,那么梯度下降法更新其实什么都没做,它不会改变参数的值。这也解释了为什么即使学习速率 α \alpha α 保持不变时,梯度下降也可以收敛到局部最低点( θ \theta θ 在接近局部最优值时,更新很慢,甚至不更新)。

回顾一下,在梯度下降法中,当接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,很显然在局部最低时导数等于零,所以导数值会自动变得越来越小,梯度下降将自动采取较小的幅度,这就是梯度下降的做法。所以实际上没有必要再另外减小 α \alpha α

这就是梯度下降算法,你可以用它来最小化任何代价函数 J,不只是线性回归中的代价函数。

结合梯度下降法,以及平方代价函数,我们会得出第一个机器学习算法,即线性回归算法。

2.6 Gradient Descent for Linear Regression(线性回归的梯度下降)

梯度下降算法和线性回归算法比较如图:
在这里插入图片描述
对我们之前的线性回归问题运用梯度下降法,关键在于求出代价函数的导数:

∂ J ∂ θ 0 = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial J}{\partial \theta_0}=\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)}) θ0J=m1i=1m(hθ(x(i))y(i)) ∂ J ∂ θ 1 = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \frac{\partial J}{\partial \theta_1}=\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x^{(i)} θ1J=m1i=1m(hθ(x(i))y(i))x(i)

repeat :
θ 0 : = θ 0 − α ∂ J ∂ θ 0 \theta_0:=\theta_0-\alpha\frac{\partial J}{\partial \theta_0} θ0:=θ0αθ0J θ 1 : = θ 1 − α ∂ J ∂ θ 1 \theta_1:=\theta_1-\alpha\frac{\partial J}{\partial \theta_1} θ1:=θ1αθ1J

刚刚使用的算法,有时也称为批量梯度下降,指的是在梯度下降的每一步中,我们都用到了所有的训练样本,在梯度下降中,在计算微分求导项时,我们需要进行求和运算,所以,在每一个单独的梯度下降中,我们最终都要计算这样一个东西,这个项需要对所有?个训练样本求和。因此,批量梯度下降法这个名字说明了我们需要考虑所有这一"批"训练样本,而事实上,有时也有其他类型的梯度下降法,不是这种"批量"型的,不考虑整个的训练集,而是每次只关注训练集中的一些小的子集。

也有其它不需要梯度下降这种迭代算法,在后面的课程中,会谈到这个方法,它可以在不需要多步梯度下降的情况下,也能解出代价函数 J 的最小值,这是另一种称为正规方程(normal equations)的方法。实际上在数据量较大的情况下,梯度下降法比正规方程要更适用一些。

3 Linear Regression with Multiple Variables

3.1 Multiple Features(多维特征)

目前为止,我们探讨了单变量/特征的回归模型,现在我们对房价模型增加更多的特征,
例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为( x 1 , x 2 , … , x n x_1,x_2,\dots,x_n x1,x2,,xn)。

符号约定:

n n n 特征数量
x ( i ) x^{(i)} x(i) i i i 个训练实例 或 即第 i i i 个训练样本的输入
x j ( i ) x^{(i)}_j xj(i) i i i 个训练实例的第 j j j 个特征 或 第 i i i 个训练样本的输入中的第 j j j 个特征

假设h表示为: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\dots+\theta_nx_n hθ(x)=θ0+θ1x1+θ2x2++θnxn
为简化公式,令 x 0 = 1 x_0=1 x0=1,
x = [ x 0 x 1 ⋮ x n ] x=\begin{bmatrix} x_0\\x_1\\\vdots\\x_n \end{bmatrix} x=x0x1xn θ = [ θ 0 θ 1 ⋮ θ n ] \theta=\begin{bmatrix} \theta_0\\\theta_1\\\vdots\\\theta_n \end{bmatrix} θ=θ0θ1θn
因此,公式简化为 h θ ( x ) = θ T x h_\theta(x)=\theta^Tx hθ(x)=θTx

3.2 Gradient Descent for Multiple Variables

与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,即: J ( θ 0 , θ 1 , … , θ n ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1,\dots,\theta_n)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 J(θ0,θ1,,θn)=2m1i=1m(hθ(x(i))y(i))2

目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。多变量线性回归的批量梯度下降算法为:
Repeat:
θ j : = θ j − α ∂ J θ j = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j:=\theta_j-\alpha\frac{\partial J}{\theta_j}=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θj:=θjαθjJ=θjαm1i=1m(hθ(x(i))y(i))xj(i)其中, j = 0 , 1 , 2 , . . . , n j=0,1,2,...,n j=0,1,2,...,n

n ≥ 2 n\geq2 n2 时,
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) \theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} θ0:=θ0αm1i=1m(hθ(x(i))y(i))x0(i)
θ 1 : = θ 1 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 1 ( i ) \theta_1:=\theta_1-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_1^{(i)} θ1:=θ1αm1i=1m(hθ(x(i))y(i))x1(i)
θ 2 : = θ 2 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 2 ( i ) \theta_2:=\theta_2-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_2^{(i)} θ2:=θ2αm1i=1m(hθ(x(i))y(i))x2(i)

  • 代价矢量化(Vectorization)
    J ( θ ) = 1 2 m ( X θ − y ) T ( X θ − y ) J(\theta)=\frac{1}{2m}(X\theta-y)^T(X\theta-y) J(θ)=2m1(Xθy)T(Xθy)
    维度说明 X m × ( n + 1 ) X_{m\times(n+1)} Xm×(n+1), y m × 1 y_{m\times1} ym×1, θ ( n + 1 ) × 1 \theta_{(n+1)\times1} θ(n+1)×1

  • 代价函数的 Python 代码

def costfunc(X,y,theta):
    inner = np.power((X @ theta - y), 2)
    return np.sum(inner)/(2*len(X))

矢量化版本

def computeCost(X, y, theta):
    inner = (X@theta-y).T@(X@theta-y)
    return inner / (2 * len(X))
  • 梯度下降矢量化
    ∂ J ∂ θ = 1 2 m ( 2 X T X θ − X T y − ( y T X ) T − 0 ) \frac{\partial J}{\partial \theta}=\frac{1}{2m}(2X^TX\theta-X^Ty-(y^TX)^T-0) θJ=2m1(2XTXθXTy(yTX)T0)

= 1 2 m ( 2 X T X θ − 2 X T y ) =\frac{1}{2m}(2X^TX\theta-2X^Ty) =2m1(2XTXθ2XTy)
= 1 m ( X T X θ − X T y ) =\frac{1}{m}(X^TX\theta-X^Ty) =m

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值