吴恩达机器学习重难点回顾

88 篇文章 11 订阅
30 篇文章 0 订阅

吴恩达机器学习重难点回顾

  1. 机器学习是什么?

1.在进行特定编程的情况下,给予计算机学习能力的领域。

2.Tom 定义的机器学习是,一个好的学习问题定义如下,他说,一个程序被认为能从经验 E 中学习,解决任务 T,达到性能度量值P,当且仅当,有了经验 E 后,经过 P 评判,程序在处理 T 时的性能有所提升。

认为经验E 就是程序上万次的自我练习的经验,而任务 T 就是下棋。性能度量值 P 呢,就是它在与一些新的对手比赛时,赢得比赛的概率。

机器学习主要的两种类型被我们称之为监督学习和无监督学习,还有一种比较常见的是强化学习

  1. 监督学习和无监督学习是什么?

吴恩达口述:监督学习这个想法是指,我们将教计算机如何去完成任务,而在无监督学习中,我们打算让它自己进行学习。
个人总结:

监督学习:从给定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入输出,也可以说是特征和目标。训练集中的目标是由人标注的。

无监督学习:输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。

监督学习举例:房价预测

横轴表示房子的面积,单位是平方英尺,纵轴表示房价,单位是
千美元。那基于这组数据,假如你有一个朋友,他有一套 750
平方英尺房子,现在他希望把房子卖掉,他想知道这房子能卖
多少钱。
在这里插入图片描述

无监督学习举例:
在无监督学习中,我们已知的数据。看上去有点不一样,不
同于监督学习的数据的样子,即无监督学习中没有任何的标签或
者是有相同的标签或者就是没标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。
在这里插入图片描述

针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。

  1. 模型:单变量线性回归

之前讲的房价预测就是一个单变量线性回归问题
在这里插入图片描述
在这里插入图片描述

吴恩达提出了机器学习模型图形表示:

在这里插入图片描述

这就是一个监督学习算法的工作方式,我们可以看到这里有我们的训练集里房屋价格我们把它喂给我们的学习算法,学习算法的工作了,然后输出一个函数,通常表示为小写 ℎ表示。ℎ 代表 hypothesis(假设),ℎ表示一个函数,输入是房屋尺寸大小,就像你朋友想出售的房屋,因此 ℎ 根据输入的 𝑥值来得出 𝑦 值,𝑦 值对应房子的价格 因此,ℎ 是一个从𝑥 到 𝑦 的函数映射

  1. 回顾内容:代价函数

在线性回归中我们有一个像这样的训练集,𝑚代表了训练样本的数量,比如 𝑚 = 47。而我们的假设函数,也就是用来进行预测的函数,是这样的线性函数形式:ℎ𝜃(𝑥) = 𝜃0 + 𝜃1𝑥。接下来我们会引入一些术语我们现在要做的便是为我们的模型选择合适的参数(parameters)𝜃0 和 𝜃1,在房价问题这个例子中便是直线的斜率和在𝑦 轴上的截距。我们选择的参数决定了我们得到的直线相对于我们的训练集的准确程度,模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是建模误差(modeling error)。

在这里插入图片描述
在这里插入图片描述

回顾内容:代价函数
左图:不同斜率的图形
右图,不同的斜率对应的代价函数的值
在这里插入图片描述

  1. 回顾内容:梯度下降

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

在这里插入图片描述
细节点:α需要改变吗?
在这里插入图片描述

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

  1. 回顾内容:多变量线性回归
    目前为止,我们探讨了单变量/特征的回归模型,现在我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(𝑥1, 𝑥1, . . . , 𝑥𝑛)。

𝑛 代表特征的数量
此时
在这里插入图片描述
在这里插入图片描述
Python 代码:

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

  1. 回顾内容:多变量线性回归-多项式回归

有时线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:

在这里插入图片描述
在这里插入图片描述

  1. 回顾内容:正规方程
    到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程是更好的解决方法:
    正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:
    在这里插入图片描述

假设我们的训练集特征矩阵为 𝑋(包含了 𝑥0 = 1)并且我们的训练集结果为向量 𝑦,则利
用正规方程解出向量 :
在这里插入图片描述
比较:
在这里插入图片描述

正规方程的不可逆性
问题:当计算 𝜃=inv(X’X ) X’y ,那对于矩阵𝑋′𝑋的结果是不可逆的情况,则是有问题的
解决方法:计算X‘X的伪逆矩阵

  1. 回顾内容:逻辑回归

在分类问题中,我们要预测的变量 𝑦 是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法。

拿二分类举例:
我们将因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量 ,其中 0 表示负向类,1 表示正向类。

尽管我们知道标签应该取值 0 或者 1,但是如果算法得到的值远大于 1 或者远小于 0 的话,就会感觉很奇怪。所以我们在接下来的要研究的算法就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在 0 到 1 之间。
希望我们的分类器的输出值在 0 和 1 之间,因此,我们希望想出一个满足某个性质的假设函数,这个性质是它的预测值要在 0 和 1 之间。

对于分类问题,我们需要输出 0 或 1,我们可以预测:
在这里插入图片描述

我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在 0 和 1 之间。 逻辑
回归模型的假设是:
在这里插入图片描述

其中: 𝑋 代表特征向量 𝑔 代表逻辑函数(logistic function)是一个常用的逻辑函数为 S 形函数(Sigmoid function),公式为:

在这里插入图片描述
python 代码实现:

import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))

Sigmoid function函数图像:

在这里插入图片描述

逻辑回归代价函数
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。
理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将
在这里插入图片描述
带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
最终的代价函数写为:
在这里插入图片描述

我们现在已经知道如何进行二元分类,可以使用逻辑回归,对于直线或许你也知道,可以将数据集一分为二为正类和负类。用一对多的分类思想,我们可以将其用在多类分类问题上。

在这里插入图片描述
10. 回顾内容:正则化(重点中的重点)

来源:过拟合的问题
我们已经学习了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差。

在这里插入图片描述

第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。

在这里插入图片描述
就以多项式理解,𝑥 的次数越高,拟合的越好,但相应的预测的能力就可能变差。

提出新的代价函数

在这里插入图片描述

参数更新公式改变:
在这里插入图片描述
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令𝜃值减少了一个额外的值。

对于逻辑回归,我们也对其模型进项正则化:
在这里插入图片描述
Python 代码:
import numpy as np
def costReg(theta, X, y, learningRate):
theta = np.matrix(theta)
X = np.matrix(X)
y = np.matrix(y)
first = np.multiply(-y, np.log(sigmoid(Xtheta.T)))
second = np.multiply((1 - y), np.log(1 - sigmoid(X
theta.T)))
reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:theta.shape[1]],2))
return np.sum(first - second) / (len(X))

  1. 回顾内容:神经网络

我们之前学的,无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。

在这里插入图片描述
当我们使用𝑥1, 𝑥2 的多次项式进行预测时,我们可以应用的很好。之前我们已经看到过,使用非线性的多项式项,能够帮助我们建立更好的分类模型。假设我们有非常多的特征,例如大于 100 个变量,我们希望用这 100 个特征来构建一个非线性的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合(𝑥1𝑥2 + 𝑥1𝑥3 + 𝑥1𝑥4+. . . +𝑥2𝑥3 + 𝑥2𝑥4+. . . +𝑥99𝑥100),我们也会有接近 5000 个组合而成的特征。这对于一般的逻辑回归来说需要计算的特征太多了。

问题来了:假设我们希望训练一个模型来识别视觉对象(例如识别一张图片上是否是一辆汽车),我们怎样才能这么做呢?一种方法是我们利用很多汽车的图片和很多非汽车的图片,然后利用这些图片上一个个像素的值(饱和度或亮度)来作为特征。

假使我们采用的都是 50x50 像素的小图片,并且我们将所有的像素视为特征,则会有2500 个特征,如果我们要进一步将两两特征组合构成一个多项式模型,则会有约25002/2个(接近 3 百万个)特征。

所以我们需要采用其他的算法去解决问题,比如神经网络

神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。

在这里插入图片描述
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。
下图为一个 3 层的神经网络,第一层成为输入层(Input Layer),最后一层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增加一个偏差单位(bias unit):
在这里插入图片描述

  1. 回顾内容:神经网络-代价函数
    计算公式:
    在这里插入图片描述

最后一个计算结果就是我们之前所说的的假设函数,然后我们在设计代价函数,就可以进行模型的求解了
在逻辑回归中,我们只有一个输出变量,又称标量(scalar),也只有一个因变量𝑦,但是在神经网络中,我们可以有很多输出变量,我们的ℎ𝜃(𝑥)是一个维度为𝐾的向量,并且我们训练集中的因变量也是同样维度的一个向量,因此我们的代价函数会比逻辑回归更加复杂一些,为:

在这里插入图片描述
这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,我们都会给出𝐾个预测,基本上我们可以利用循环,对每一行特征都预测𝐾个不同结果,然后在利用循环在𝐾个预测中选择可能性最高的一个,将其与𝑦中的实际数据进行比较。

  1. 回顾内容:反向传播算法
    为了计算代价函数的偏导数 ,我们需要采用一种反向传播算法,也就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。 以一个例子来说明反向传播算法。
    在这里插入图片描述
    在这里插入图片描述

  2. 回顾内容:模型选择和交叉验证集

在这里插入图片描述
显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用交叉验证集来帮助选择模型

  1. 回顾内容:诊断偏差和方差

当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。那么这两种情况,哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关?

在这里插入图片描述
对于训练集,当 𝑑 较小时,模型拟合程度更低,误差较大;随着 𝑑 的增长,拟合程度提高,误差减小。
对于交叉验证集,当 𝑑 较小时,模型拟合程度低,误差较大;但是随着 𝑑 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。

训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合

  1. 回顾内容:类偏斜的误差度量

设定某个实数来评估你的学习算法,并衡量它的表现,有了算法的评估和误差度量值。有一件重要的事情要注意,就是使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微妙的影响,这件重要的事情就是偏斜类(skewed classes)的问题

查准率(Precision)和查全率(Recall) 我们将算法预测的结果分成四种情况:

  1. 正确肯定(True Positive,TP):预测为真,实际为真
  2. 正确否定(True Negative,TN):预测为假,实际为假
  3. 错误肯定(False Positive,FP):预测为真,实际为假
  4. 错误否定(False Negative,FN):预测为假,实际为真
    则:查准率=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。
    查全率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。

回顾内容:类偏斜的误差度量
查准率(Precision)=TP/(TP+FP) 例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。
查全率(Recall)=TP/(TP+FN)例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。
我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数
据的不同而不同:

在这里插入图片描述

  1. 回顾内容:支持向量机(Support Vector Machines)

还有一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector Machine)。与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式
在这里插入图片描述
我们的思路
在这里插入图片描述
如果 𝐶非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为 0 的最优解。因此,让我们尝试在代价项的第一项为 0 的情形下理解该优化问题。比如我们可以把𝐶设置成了非常大的常数,这将给我们一些关于支持向量机模型的直观感受。

注:支持向量机从一种角度上来说,忽略总体样本,更注重边缘样本,也更不容易过拟合

在这里插入图片描述
在这里插入图片描述

而如果正则化参数𝐶,设置的非常大,这事实上正是支持向量机将会做的。它将决策界,从黑线变到了粉线,但是如果𝐶设置的小一点,如果你将 C 设置的不要太大,则你最终会得到这条黑线,

回顾内容:支持向量机-核函数
支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采用这种不带核函数的支持向量机
在这里插入图片描述

  1. 回顾内容:聚类算法-k-means算法

新的开始:我们将要让计算机学习无标签数据,而不是此前的标签数据。

算法应用举例:也许你在数据库中存储了许多客户的信息,而你希望将他们分成不同的客户群,这样你可以对不同类型的客户分别销售产品或者分别提供更适合的服务

K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为:
首先选择𝐾个随机的点,称为聚类中心(cluster centroids);
对于数据集中的每一个数据,按照距离𝐾个中心点的距离,将其与距离最近的中心点关
联起来,与同一个中心点关联的所有点聚成一类。

算法思路:K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,因此 K-均值的代价函数(又称畸变函数 Distortion function)为:

代价函数:
在这里插入图片描述
如何选择聚类数?
当人们在讨论,选择聚类数目的方法时,有一个可能会谈及的方法叫作“肘部法则”。关 于“肘部法则”,我们所需要做的是改变𝐾值,也就是聚类类别数目的总数。

在这里插入图片描述

  1. 回顾内容:距离公式(补)

在这里插入图片描述

  1. 回顾内容:主成分分析法

在 PCA 中,我们要做的是找到一个方向向量(Vector direction),当我们把所有的数据都投射到该向量上时,我们希望投射平均均方误差能尽可能地小。方向向量是一个经过原点的向量,而投射误差是从特征向量向该方向向量作垂线的长度。

在这里插入图片描述
特点:
PCA 将𝑛个特征降维到𝑘个,可以用来进行数据压缩,如果 100 维的向量最后可以用 10维来表示,那么压缩率为 90%。同样图像处理领域的 KL 变换使用 PCA 做图像压缩。但 PCA要保证降维后,还要保证数据的特性损失最小。

PCA 技术的一大好处是对数据进行降维的处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。

PCA 技术的一个很大的优点是,它是完全无参数限制的。在 PCA 的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的

步骤
在这里插入图片描述
在这里插入图片描述

选择主成分的数量
我们希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的𝑘值。如果我们希望这个比例小于 1%,就意味着原本数据的偏差有 99%都保留下来了,如果我们选择保留 95%的偏差,便能非常显著地降低模型中特征的维度了

计算公式:

在这里插入图片描述

  1. 回顾内容:异常检测

什么是异常检测呢?为了解释这个概念,举一个例子吧:

假想你是一个飞机引擎制造商,当你生产的飞机引擎从生产线上流出时,你需要进行QA(质量控制测试),而作为这个测试的一部分,你测量了飞机引擎的一些特征变量,比如引擎运转时产生的热量,或者引擎的振动等等。

给定数据集 𝑥(1), 𝑥(2), . . , 𝑥(𝑚),我们假使数据集是正常的,我们希望知道新的数据 xtest是不是异常的,即这个测试数据不属于该组数据的几率如何。我们所构建的模型应该能根据该测试数据的位置告诉我们其属于一组数据的可能性 𝑝(𝑥)。
上图中,在蓝色圈内的数据属于该组数据的可能性较高
,而越是偏远的数据,其属于该组数据的可能性就越低

在这里插入图片描述

  1. 回顾内容:异常检测-高斯分布检测
    在这里插入图片描述
    在这里插入图片描述

  2. 回顾内容:异常检测-监督学习比较
    在这里插入图片描述

  3. 回顾内容:推荐系统

假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分

在这里插入图片描述
前三部电影是爱情片,后两部则是动作片,我们可以看出 Alice 和 Bob 似乎更倾向与爱情片,而 Carol 和 Dave 似乎更倾向与动作片。并且没有一个用户给所有的电影都打过分。我们希望构建一个算法来预测他们每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据

在我们的例子中,我们可以假设每部电影都有两个特征,如𝑥1代表电影的浪漫程度,𝑥2代表电影的动作程度

在这里插入图片描述
则每部电影都有一个特征向量,如𝑥(1)是第一部电影的特征向量为[0.9 0]。下面我们要基于这些特征来构建一个推荐系统算法。 假设我们采用线性回归模型,我们可以针对每一个用户都训练一个线性回归模型,如𝜃(1)是第一个用户的模型的参数

针对用户 𝑗,该线性回归模型的代价为预测误差的平方和,加上正则化项:

在这里插入图片描述
𝜃(𝑗)用户 𝑗 的参数向量
𝑥(𝑖)电影 𝑖 的特征向量
𝑦(𝑖,𝑗) 代表用户 𝑗 给电影 i 的评分

  1. 回顾内容:推荐系统-协同过滤

在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征

在这里插入图片描述

但是如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。协同过滤算法可以同时学习这两者。

  1. 初始 𝑥(1), 𝑥(1), . . . 𝑥(𝑛𝑚), 𝜃(1), 𝜃(2), . . . , 𝜃(𝑛𝑢)
    为一些随机小值
  2. 使用梯度下降算法最小化代价函数
  3. 在训练完算法后,我们预测(𝜃(𝑗))𝑇𝑥(𝑖)为用户 𝑗
    给电影 𝑖 的评分通过这个学习过程获得的特征矩阵包含了
    有关电影的重要数据,这些数据不总是人能读
    懂的,但是我们可以用这些数据作为给用户推荐电影的
    依据

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值