吴恩达老师机器学习视频课程学习笔记2018.3



*************************************
吴恩达老师机器学习视频课程学习笔记2018.3
视频地址:http://study.163.com/course/introduction/1004570029.htm
*************************************

1.3监督学习

回归这个词的意思是,我们在试着推测出这一系列连续值属性。
监督学习指的就是我们给学习算法一个数据集。这个数据集由“正确答案”
组成。在房价的例子中,我们给了一系列房子的数据,我们给定数据集中每个样本的正确价
格,即它们实际的售价然后运用学习算法,算出更多的正确答案。

那你怎么处理无限多个特征,甚至怎么存储这些特
征都存在问题,你电脑的内存肯定不够用。 我们以后会讲一个算法,叫支持向量机SVM,里面有
一个巧妙的数学技巧,能让计算机处理无限多个特征

监督学习。其基本思想是,我们数据集中的每个样
本都有相应的“正确答案”。再根据这些样本作出预测,就像房子和肿瘤的例子中做的那样。
我们还介绍了回归问题,即通过回归来推出一个连续的输出,之后我们介绍了分类问题,其
目标是推出一组离散的结果。
垃圾邮件问题。如果你有标记好的数据,区别好是垃圾还是非垃
圾邮件,我们把这个当作 监督学习问题。
糖尿病,这个其实就像是我们的乳腺癌,上个视频里的。只是替换了好、
坏肿瘤,良性、恶性肿瘤,我们改用糖尿病或没病。所以我们把这个当作 监督学习,

1.4  无监督学习
无监督学习中没有任何的标签
无监督学习算法可能会把这些数据分成两个不同
的簇。所以叫做聚类算法。
谷歌新闻自动把新闻分类放置
一个 DNA 微观数据的例子。基本思想是输入一组不同个
体,对其中的每个个体,你要分析出它们是否有一个特定的基因。
社交网络好友自动分类
顾客自动分类,实现精准销售。细分市场
无监督学习也可用于天文数据分析
打算使用 Octave 编程环境。Octave,是免费的开源软件,使用一个像 Octave 或 Matlab
的工具,许多学习算法变得只有几行代码就可实现。
使用一种工具像 Octave 来做第一步
的学习算法的原型搭建,只有在你已经让它工作后,你才移植它到 C++或 Java 或别的语言。

二、单变量线性回归( ( Linear Regression with One Variable) )
2.1 模型表示
我们的第一个学习算法是线性回归算法。让我们通过一个例子来开始:这个例子是预测住房价格的。
它被称作监督学习是因为对于每个数据来说,我们给出了“正确的答案。
更具体来说,这是一个回归问题。回归一词指的是,我们根据之前的数据预测出一个准确的输出值,对于这个例子就是价格
另一种最常见的监督学习方式,叫做分类问题,当我们想要预测离散的输出值,例
如,我们正在寻找癌症肿瘤,并想要确定肿瘤是良性的还是恶性的,这就是 0/1 离散输出的
问题。
在监督学习中我们有一个数据集,这个数据集被称训练集。
我们将要用来描述这个回归问题的标记如下:
m 代表训练集中实例的数量
x 代表特征/输入变量
y 代表目标变量/输出变量
(x,y) 代表训练集中的实例

i i
x y 代表第 i 个观察实例
h 代表学习算法的解决方案或函数也称为假设(hypothesis)
因为只含有一个特征/输入变量,因此这样的问题叫作单变量线性回归问题。
2.2 代价函数cost function
模型所预测的值与训练集中实际值之间的差距(下图中蓝线所指)就是 建模误差(modeling error)。
我们的目标便是选择出可以使得建模误差的平方和能够最小的模型参数。也就是让代价函数最小。
代价函数也被称作平方误差函数,有时也被称为平方误差代价函数。
还有其他的代价函数也能很好地发挥作用,但是平方误差代价函数可能是解决回
归问题最常用的手段了。

2.3  代价函数的直观理解 1

2.4 代价函数的直观理解2
代价函数的样子,等高线图,则可以看出在三维空间中存在一个使得函数最小的点。
2.5 梯度下降Gradient Descent
梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数的最小值。
梯度下降背后的思想是:开始时我们随机选择一个参数的组合计算代
价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到
到一个局部最小值(local minimum),
批量梯度下降(batch gradient descent)算法的公式为:repeat until convergence.
其中 α 是学习率(learning rate),它决定了我们沿着能让代价函数下降程度最大的方
向向下迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速
率乘以代价函数的导数。
同时更新是梯度下降中的一种常用方法.
2.6 梯度下降的直观理解
如果 a 太大,它会导致无法收敛,甚至发散。如果 a 太小的话,可能会很慢
因为它会一点点挪动,它会需要很多步才能到达全局最低点。
所以当我们接近局部最低时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度,这就是
梯度下降的做法。
平方误差函数,结合梯度下降法,以及平方代价函数,我们会得出第一
个机器学习算法,即线性回归算法。
2.7 梯度下降的线性回归
Gradient Descent For Linear Regression
三 线性代数回顾Linear Algebra Review
3.1   矩阵和向量
Matrices and Vectors
矩阵的维数即行数×列数
向量是一种特殊的矩阵,讲义中的向量一般都是列向量
四维列向量(4×1)
 1 索引向量和 0 索引向量
 1索引表明第一个元素从1开始,不是计算机中的从0开始计算
 3.2 加法和标量乘法
 Addition and Scalar Multiplication
 矩阵的加法:行列数相等的可以加
 矩阵的乘法:每个元素都要乘
 3.3 矩阵向量乘法 Matrix Vector Multiplication
 矩阵和向量的乘法如图:m×n 的矩阵乘以 n×1 的向量,得到的是 m×1 的向量
 对应行和对应列的元素分别乘积,并且相加。
 3.4  矩阵乘法Matrix Matrix Multiplication
 矩阵乘法:
m×n 矩阵乘以 n×o 矩阵,变成 m×o 矩阵。
3.5  矩阵乘法的性质Matrix Multiplication Properties
矩阵乘法的性质:
矩阵的乘法不满足交换律:A×B≠B×A
矩阵的乘法满足结合律。即:A×(B×C)=(A×B)×C
单位矩阵:在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的 1,我们称
这种矩阵为单位矩阵.它是个方阵,一般用 I 或者 E 表示,本讲义都用 I 代表单位矩阵,从
左上角到右下角的对角线(称为主对角线)上的元素均为 1 以外全都为 0
3.6 逆、转置 Inverse and Transpose
矩阵的转置:设 A 为 m×n 阶矩阵,定义 A 的转置为这样一个 n×m 阶矩阵 B,B 的第 i 行第
j 列元素是 A 的第 j 行第 i 列元素

四 多变量线性回归(Linear Regression with Multiple Variables)
4.1 多维特征
Multiple Features
变量和特征是一个含义
构成一个含有多个变量的模型,模型中的特征为 (x1,x2,x3,...xn)
增添更多特征后,我们引入一系列新的注释:
n 代表特征的数量
xi代表第 i 个训练实例,是特征矩阵中的第 i 行,是一个向量(vector),包括房屋面积,楼层,地段等所有参数
支持多变量的假设 h 表示为:h (x) = o0 + o1*x1 + o2*x2 +... + on*xn
上标 T 代表矩阵转置
4.2 多变量梯度下降 Gradient Descent for Multiple Variables
代价函数是所有建模误差的平方和

我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。
我们开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的
值,如此循环直到收敛(找到最小值)
4.3 梯度下降法实践 1- 特征缩放 Gradient Descent in Practice I - Feature Scaling
在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯
度下降算法更快地收敛。

4.4 梯度下降法实践 2- 学习率Gradient Descent in Practice II - Learning Rate
梯度下降算法的每次迭代受到学习率的影响,如果学习率 α 过小,则达到收敛所需的迭
代次数会非常高;如果学习率 α 过大,每次迭代可能不会减小代价函数,可能会越过局部最
小值导致无法收敛。
4.5 特征和多项式回归 Features and Polynomial Regression
线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型

4.6 正规方程 Normal Equation
对于某些线性回归问题,正规方程方法是更好的解决方案。
只要特征变量数量小于一万,我通常使用标准方程法,而不使用梯度下降法,标准方程不需要考虑学习率,可以一次线性代数运算求出,

4.7 正规方程及不可逆性( 选修 ) Normal Equation Noninvertibility (Optional)
有些矩阵可逆,而有些矩阵不可逆。我
们称那些不可逆矩阵为奇异或退化矩阵。

五 Octave  教程( ( Octave Tutorial) )
5.1 基本操作
我将教你一种编程语言:Octave 语言。你能够用它来非常迅速地实现这
门课中我们已经学过的,或者将要学的机器学习算法

5.2 移动数据 Moving Data Around

5.3 计算数据 Computing on Data
5.4 绘图数据 Plotting Data
5.5 控制语句:for ,while ,if Control Statements
5.6 向量化 Vectorization
向量化可以避免自己用循环来做乘法,加快速度,节省资源
5.7 工作和提交的编程练习Working on and Submitting Programming Exercises

六 逻辑回归( Logistic Regression)
6.1  分类问题 Classification
在分类问题中,你要预测的变量 y 是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法。
线性回归模型我们只能预测连续的值
我们将因变量(dependant variable)可能属于的两个类分别称为负向类(negative class)和
正向类(positive class)
逻辑回归算法,这个算法的性质是:它的输出值永远在 0 到 1 之间。

6.2 假说表示 Hypothesis Representation

回归模型的假设是:hθ(x) = g(θT*X)
X 代表特征向量
g 代表逻辑函数(logistic function)是一个常用的逻辑函数为 S 形函数(
6.3   判定边界 Decision Boundary
决策边界(decision boundary)
对于普通的分布,用一次函数就行。
对于复杂的分布,需要用到高次函数(需要二次方特征)

6.4 代价函数 Cost Function
如何拟合逻辑回归模型的参数θ,对于线性回归模型,我们定义的代价函数是所有模型误差的平方和.
非凸函数(non-convex function)

求代价函数最小值的方法:
梯度下降法,共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher
goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)
6.5 简化的成本函数和梯度下降 Simplified Cost Function and Gradient Descent


6.6 高级优化 Advanced Optimization
通常不需要手动选择学习率 α

6.7 多类 别 分类算法:一对 多 Multiclass Classification_ One-vs-al
把三个类别先分成两个类别,然后换个类,再分为两个类别。

七 正则化Regularization
7.1 过拟合的问题 The Problem of Overfitting
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集
第三个模型能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好
正则化(regularization)(保留所有的特征,但是减少参数的大小(magnitude))的技术,它可以改善或者减少过度拟合问题

7.2 代价函数 Cost Function
我们可以从之前的事例中看出,正是那些高次项导致了过拟合的产生,所以如果我们能
让这些高次项的系数接近于 0 的话,我们就能很好的拟合了。

所以我们要做的就是在一定程度上减小这些参数 θ的值,这就是正则化的基本方法。
我们决定要减少θ3,θ4的大小,我们要做的便是修改代价函数,在其中θ3,θ4设置一点惩罚

7.3   正则化线性回归 Regularized Linear Regression
正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的
基础上令θ值减少了一个额外的值

7.4 正则化的逻辑回归模型 Regularized Logistic Regression
一旦你精通了线性回归、高级优化算法
和正则化技术,坦率地说,你对机器学习的理解可能已经比许多工程师深入了

第八、神经网络 :表述 Neural Networks: Representation

8.1 非线性假设Non-linear Hypotheses
用于处理数量非常惊人的特征组合情况。

8.2 神经元和大脑 Neurons and the Brain

张图是用舌头学会“看”的一个例子

8.3 模型表示 1 Model Representation I
大脑中的神经网络:每一个神经元
都可以被认为是一个处理单元/神经核(processing unit/ Nucleus),它含有许多输入/树突
(input/Dendrite),并且有一个输出/轴突(output/Axon)。神经网络是大量神经元相互链
接并通过电脉冲来交流的一个网络。
神经元想要传递一个消息,它就会就通过它的轴
突,发送一段微弱电流给其他神经元,这就是轴突
人类思考的模型:我们的神经元把自己的收到的消息进行计算,并向其他神经元传
递消息。
神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元
(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。
在神经网络中,参数又可被成为权重(weight)
我们设计出了类似于神经元的神经网络,效果如下:
其中x1,x2,x3是输入单元(input units),我们将原始数据输入给它们。
a1,a2,a3是中间单元,它们负责将数据进行处理,然后呈递到下一层。
最后是输出单元,它负责计算hθx
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下
一层的输入变量。下图为一个 3 层的神经网络,第一层成为输入层(Input Layer),最后一
层称为输出层(Output Layer),中间一层成为隐藏层(Hidden Layers)。我们为每一层都增
加一个偏差单位(bias unit)
aij代表第 j 层的第 i 个激活单元。
θj代表从第 j 层映射到第 j+1 层时的权重的矩阵,
每一个 a 都是由上一层所有的 x 和每一个 x 所对应的  决定的。
(我们把这样从左到右的算法称为前向传播算法( FORWARD PROPAGATION ))

8.4 模型表示 2 Model Representation II
其实神经网络就像是 logistic regression,只不过我们把 logistic regression 中的输入向量
x1,x2,x3变成了中间层的a1,a2,a3

我们可以把a0, a1, a2, a3 看成更为高级的特征值,也就是x1, x2, x3, x4 的进化体,并且它
们是由 x 与 θ决定的,因为是梯度下降的,所以 a 是变化的,并且变得越来越厉害,所以
这些更高级的特征值远比仅仅将 x 次方厉害,也能更好的预测新数据。这就是神经网络相比于逻辑回归和线性回归的优势。

8.5 样本 和直观理解 1  Examples and Intuitions
神经网络中,单层神经元(无中间层)的计算可用来表示逻辑运算,比如逻辑 AND、逻
辑或 OR

8.6 样本 和直观理解 2  Examples and Intuitions

二元逻辑运算符(BINARY LOGICAL OPERATORS)当输入特征为布尔值(0 或 1)时,我
们可以用一个单一的激活层可以作为二元逻辑运算符,为了表示不同的运算符,我们之需要
选择不同的权重即可
用基本的与,或,非逻辑我们可以逐渐构造出越来越复杂的函数,也能得到更加厉害的特征值。
这就是神经网络的厉害之处。

8.7 多类分类 Multiclass Classification
输入向量 x 有三个维度,两个中间层,输出层 4 个神经元分别用来表示 4 类,

第 5  周
九、神经网络的学习( ( Neural Networks: Learning) )
9.1  代价函数 Cost Function
假设神经网络的训练样本有 m 个,每个包含一组输入 x 和一组输出信号 y,L 表示神经
网络层数,SI表示每层的 neuron 个数(SL 表示输出层神经元个数),Sl 代表最后一层中处理
单元的个数。
在逻辑回归中,我们只有一个输出变量,又称标量(scalar),也只有一个因变量 y,但
是在神经网络中,我们可以有很多输出变量,我们的 hθ(x)是一个维度为 K 的向量. .。

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

hθ(x)与真实值之间的距离为每个样本-每个类输出的加和,对参数进
行 regularization 的 bias 项处理所有参数的平方和。

9.2 反向传播算法 Backpropagation Algorithm
为了计算代价函数的偏导数 我们需要采用一种反向传播算法,也
就是首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。

即首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的
结果求出最后一层的误差,然后利用该误差运用反向传播法计算出直至第二层的所有误差。

9.3 反向传播算法的直观理解 Backpropagation Intuition

9.4 实现注意:展开参数 Implementation Note_ Unrolling Parameters
在上一段视频中,我们谈到了怎样使用反向传播算法计算代价函数的导数。

9.5 梯度检验 Gradient Checking
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些
不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。
为了避免这样的问题,我们采取一种叫做梯度的数值检验(Numerical Gradient Checking)。
这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。

对梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后
计算两个点的平均值用以估计梯度。

9.6 随机初始化 Random Initialization

通常初始参数为正负 ε 之间的随机值

9.7   综合 起来 Putting It Together
训练神经网络:
1.  参数的随机初始化
2.  利用正向传播方法计算所有的 h θ (x)
3.  编写计算代价函数 J 的代码
4.  利用反向传播方法计算所有偏导数
5.  利用数值检验方法检验这些偏导数
6.  使用优化算法来最小化代价函数

9.8 自主驾驶 Autonomous Driving

十、应用机器学习的建议( ( Advice for Applying Machine Learning) )
10.1  决定下一步做什么 Deciding What to Try Next
我想做的是确保你在设计机器学习的系统时,你能够明白怎样选择一条最合适、最正确的道路。

但有时候获得更多的训练数据实际上并没有作用。
你也许能想到的是尝试选用更少的特征集。
我们非常希望在花费大量时间完成这些工作之前,我们就能知道其效果如何
当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以
做什么?
1.  获得更多的训练实例——通常是有效的,但代价较大,下面的方法也可能有效,可
考虑先采用下面的几种方法。
2.  尝试减少特征的数量
3.  尝试获得更多的特征
4.  尝试增加多项式特征
5.  尝试减少正则化程度 λ
6.  尝试增加正则化程度 λ

我们不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法
来帮助我们知道上面哪些方法对我们的算法是有效的。

10.2 评估一个假设
参考视频: 10 - 2 - Evaluating a Hypothesis
为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用 70%的数据作为训
练集,用剩下 30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的
数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。

10.3 模型选择和交叉验证集
参考视频: 10 - 3 - Model Selection and Train_Validation_Test Sets
使用 60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用 20%的数据
作为测试集

10.4 诊断偏差和方差
参考视频: 10 - 4 - Diagnosing Bias vs. Variance (
当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要
么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合
问题。
高偏差和高方差的问题基本上来说是欠拟合和过拟合的问题。
由图可知:训练集误差和交叉验证集误差近似时:偏差/欠拟合
交叉验证集误差远大于训练集误差时:方差/过拟合

10.5   正则 化和偏差/ 方差
参考视频: 10 - 5 - Regularization and Bias_Variance (11 min).mkv

在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能
会正则化的程度太高或太小了,即我们在选择 λ 的值时也需要思考与刚才选择多项式模型次
数类似的问题。
我们同样把数据分为训练集、交叉验证集和测试集。
选择 λ 的方法为:
1.  使用训练集训练出 12 个不同程度正则化的模型
2.  用 12 模型分别对交叉验证集计算的出交叉验证误差
3.  选择得出交叉验证误差 最小的模型
4.  运用步骤 3 中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和
交叉验证集模型的代价函数误差与 λ 的值绘制在一张图表上:
当 λ 较小时,训练集误差较小(过拟合)而交叉验证集误差较大
•  随着 λ 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后
增加

10.6 学习曲线
参考视频: 10 - 6 - Learning Curves
学习曲线就是一种很好的工具,我经常使用学习曲线来判断某一个学习算法是否处于偏
差、方差问题。学习曲线是学习算法的一个很好的 合理检验(sanity check)。学习曲线是将
训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。
也就是说在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。
如何利用学习曲线识别高方差/过拟合: 假设我们使用一个非常高次的多项式模型,并
且正则化非常小,可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数
据可以提高模型的效果。
也就是说在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果

10.7 决定下一步做什么
参考视频: 10 - 7 - Deciding What to Do Next Revisited
1.  获得更多的训练实例——解决高方差
2.  尝试减少特征的数量——解决高方差
3.  尝试获得更多的特征——解决高偏差
4.  尝试增加多项式特征——解决高偏差
5.  尝试减少正则化程度 λ——解决高偏差
6.  尝试增加正则化程度 λ——解决高方差

十一 机器学习系统的设计( ( Machine Learning System Design) )
11.1  首先要做什么
参考视频: 11 - 1 - Prioritizing What to Work On
不要担心你的算法太简单,或者太不完美,而是尽可能快地实现你的算法。

本周以一个垃圾邮件分类器算法为例进行讨论。
误差分析
参考视频: 11 - 2 - Error Analysis

构建一个学习算法的推荐方法为:
1.  从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算

2.  绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
3.  进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势

11.3 类偏斜的误差度量
参考视频: 11 - 3 - Error Metrics for Skewed Classes
使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微妙
的影响,这件重要的事情就是偏斜类(skewed classes)的问题。类偏斜情况表现为我们的训
练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。
查准率=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿
瘤的病人的百分比,越高越好。
查全率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤
的病人的百分比,越高越好。

11.4   查 准 率和查 全 率之间的权衡
参考视频: 11 - 4 - Trading Off Precision and Recall
在很多应用中,我们希望能够保证查准率和召回率的相对平衡。

11.5 机器学习的数据
参考视频: 11 - 5 - Data For Machine Learning
像这样的结果,引起了一种在机器学习中的普遍共识:"取得成功的人不是拥有最好算
法的人,而是拥有最多数据的人"。

十二、支持向量机( ( Support Vector Machines) )
12.1  优化目标
参考视频: 12 - 1 - Optimization Objective


12.2 大边界的直观理解
参考视频: 12 - 2 - Large Margin Intuition
人们有时将支持向量机看作是大间距分类器。
在分类两类东西时候,在中间划了一条直线。讨论直线距离两类东西之间的距离。而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间
距来分离样本。因此支持向量机有时被称为 大间距分类器

12.3 数学背后的大边界分类( 选修 )
参考视频: 12 - 3 - Mathematics Behind Large Margin Classification
因此支持向量机做的全部事情,就是 极小化参数向量  范数的平方 , 或者说长度
的平方。

12.4 核函数 1
参考视频: 12 - 4 - Kernels I
这里是一个 高斯核函数(Gaussian Kernel)。  注:这个函数与正态分布没什么实际上的关系,只是看上去像而已

12.5 核函数 2
参考视频: 12 - 5 - Kernels II
给定一个训练实例x,我们利用x的各个特征与我们预先选定的标 地标(landmarks)l (1) ,l (2) ,l (3)
的近似程度来选取新的特征 f 1 ,f 2 ,f 3 。

如何选择地标?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有 m 个实例,则我们
选取 m 个地标
支持向量机也可以不使用核函数,不使用核函数又称为数 线性核函数(linear kernel),

12.6 使用支持向量机
参考视频: 12 - 6 - Using An SVM
从逻辑回归模型,我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?
下面是一些普遍使用的准则:
n 为特征数,m 为训练样本数。
(1)如果相较于 m 而言,n 要大许多,即训练集数据量不够支持我们训练一个复杂的非
线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
(2)如果 n 较小,而且 m 大小中等,例如 n 在 1-1000 之间,而 m 在 10-10000 之间,
使用高斯核函数的支持向量机。
(3)如果 n 较小,而 m 较大,例如 n 在 1-1000 之间,而 m 大于 50000,则使用支持向量
机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向
量机
十三 聚类( ( Clustering) )
13.1  无监督学习:简介
参考视频: 13 - 1 - Unsupervised Learning_ Introduction
在非监督学习中,我们的数据没有附带任何标签。
图上的数据看起来可以分成两个分开的点集(称为簇),一个能够找到我圈出的
这些点集的算法,就被称为聚类算法。
聚类算法一般用来做什
么呢?
市场分割,客户群分类。社交网络分析,更好的组织计算机集群,了解星系的形成。
感觉机器学习只是一个手段,一个技术,一个工具,类似英语,是一种通识教育。我们要使用这个工具去服务实体行业,比如如何更便宜生产汽车,
如何寻找外星人等等具体的事情。机器学习本身没啥意思。


13.2  K- 均值算法
参考视频: 13 - 2 - K-Means Algorithm
K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为:
首先选择 k 个随机的点,称为 聚类中心(cluster centroids);
对于数据集中的每一个数据,按照距离 K 个中心点的距离,将其与距离最近的中心点关
联起来,与同一个中心点关联的所有点聚成一类。
计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。
重复步骤 2-4 直至中心点不再变化。
算法分为两个步骤,第一个 for 循环是赋值步骤,即:对于每一个样例 i,计算其应该属
于的类。第二个 for 循环是聚类中心的移动,即:对于每一个类 k,重新计算该类的质心。
K-均值算法也可以很便利地用于将数据分为许多不同组,即使在没有非常明显区分的组
群的情况下也可以。

13.3 优化目标
参考视频: 13 - 3 - Optimization Objective
K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和,
因此 K-均值的代价函数(又称 畸变函数 Distortion function)

13.4 随机初始化
参考视频: 13 - 4 - Random Initialization
在运行 K-均值算法的之前,我们首先要随机初始化所有的聚类中心点,下面介绍怎样
做:
1.  我们应该选择 K<m,即聚类中心点的个数要小于所有训练集实例的数量
2.  随机选择 K 个训练实例,然后令 K 个聚类中心分别与这 K 个训练实例相等
K-均值的一个问题在于,它有可能会停留在一个局部最小值处,而这取决于初始化的情
况。
我们通常需要多次运行 K-均值算法,每一次都重新进行随机初始
化,最后再比较多次运行 K-均值的结果,选择代价函数最小的结果。这种方法在 k 较小的时
候(2--10)还是可行的,但是如果 k 较大,这么做也可能不会有明显地改善

13.5 选择聚类数
参考视频: 13 - 5 - Choosing the Number of Clusters


没有所谓最好的选择聚类数的方法,通常是需要根据不同的问题,人工进行选择的。

十四 降维( ( Dimensionality Reduction) )
14.1  动机一:数据压缩
参考视频: 14 - 1 - Motivation I_ Data Compression
第二种类型的无监督学习问题,称为降维。
降维的动机是数据压缩

14.2 动机二:数据可视化
参考视频: 14 - 2 - Motivation II_ Visualization

假使我们有有关于许多不同国家的数据,每一个特征向量都有 50 个特征:就是说每一组数据都有50个元素。
如果要将这个 50 维的数据可视化是不可能的。使用降维的方法
将其降至 2 维,我们便可以将其可视化了。

14.3 主成分分析问题 PCA
参考视频: 14 - 3 - Principal Component Analysis Problem Formulation
在 PCA 中,我们要做的是找到一个方向向量(Vector direction),当我们把所有的数据
都 投射到该向量上时,我们希望投射平均均方误差能尽可能地小。方向向量是一个经过原
点的向量,而投射误差是从特征向量向该方向向量作垂线的长度。(就是从点到直线做垂线,求垂线最短的过原点的直线)

主成分分析与线性回顾的比较:
主成分分析与线性回归是两种不同的算法。主成分分析最小化的是投射误差(Projected
Error),而线性回归尝试的是最小化预测误差。线性回归的目的是预测结果,而主成分分析
不作任何预测。

主成分分析是做垂直于直线的线段。线性回归是做垂直于X轴的直线。
PCA 将 n 个特征降维到 k 个,可以用来进行数据压缩,如果 100 维的向量最后可以用 10
维来表示,那么压缩率为 90%。同样图像处理领域的 KL 变换使用 PCA 做图像压缩。但 PCA
要保证降维后,还要保证数据的特性损失最小。


14.4 主成分分析算法
参考视频: 14 - 4 - Principal Component Analysis Algorithm

PCA 减少 n 维到 k 维:
第一步是均值归一化。我们需要计算出所有特征的均值,然后令 x j = x j -μ j 。如果特征是
在不同的数量级上,我们还需要将其除以标准差 σ 2 。
第二步是计算 协方差矩阵(covariance matrix)Σ
第三步是计算协方差矩阵 Σ 的 特征向量(eigenvectors):
在 Octave 里我们可以利用 奇异值分解(singular value decomposition)来求解,[U, S, V]=
svd(sigma)。

14.5 选择主成分的 数量
参考视频: 14 - 5 - Choosing The Number Of Principal Components (13 min).mkv
主要成分分析是减少投射的平均均方误差:
我们希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的 k 值。
如果我们希望这个比例小于 1%,就意味着原本数据的偏差有 99%都保留下来了,如果
我们选择保留 95%的偏差,便能非常显著地降低模型中特征的维度了。

14.6 重建的压缩表示
参考视频: 14 - 6 - Reconstruction from Compressed Representation
如何恢复被压缩的数据

14.7 主成分分析法的应用建议
参考视频: 14 - 7 - Advice for Applying PCA
假使我们正在针对一张 100×100 像素的图片进行某个计算机视觉的机器学习,即总共
有 10000 个特征。
1.  第一步是运用主要成分分析将数据压缩至 1000 个特征
2.  然后对训练集运行学习算法
3.  在预测时,采用之前学习而来的
Ureduce 将输入的特征 x 转换成特征向量 z,然后再
进行预测
注:如果我们有交叉验证集合测试集,也采用对训练集学习而来的
Ureduce

十五 异常检测( ( Anomaly Detection)
15.1  问题的动机
参考文档: 15 - 1 - Problem Motivation
这种算法的一个有趣之处在于:它虽然主要用于非监督学习问
题,但从某些角度看,它又类似于一些监督学习问题。

根据已知数据特征变量画出一个范围,如果新的预测数据落在了这个范围外,就很有可能有问题。

上图中,在蓝色圈内的数据属于该组数据的可能性较高,而越是偏远的数据,其属于该
组数据的可能性就越低。
这种方法称为密度估计,

15.2 高斯分布
参考视频: 15 - 2 - Gaussian Distribution
高斯分布,也称为正态分布。

通常如果我们认为变量  x 符合高斯分布,则其概率密度函数为:


15.3 算法
参考视频: 15 - 3 - Algorithm
应用高斯分布开发异常检测算法。
对于给定的数据集,我们要针对每一个特征计算期望和方差的估计值。

15.4 开发和评价一个异常检测系统
参考视频: 15 - 4 - Developing and Evaluating an Anomaly Detection System
当我们开发一个
异常检测系统时,我们从带标记(异常或正常)的数据着手,我们从其中选择一部分正常数
据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试
集。
例如:我们有 10000 台正常引擎的数据,有 20 台异常引擎的数据。 我们这样分配数
据:
6000 台正常引擎的数据作为训练集
2000 台正常引擎和 10 台异常引擎的数据作为交叉检验集
2000 台正常引擎和 10 台异常引擎的数据作为测试集

15.5
异常检测与监督学习对比
参考视频: 15 - 5 - Anomaly Detection vs. Supervised Learning

15.6 选择特征
参考视频: 15 - 6 - Choosing What Features to Use
异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够
工作,但是最好还是将数据转换成高斯分布
误差分析:
一个常见的问题是一些异常的数据可能也会有较高的 p(x)值,因而被算法认为是正常的。
这种情况下误差分析能够帮助我们,我们可以分析那些被算法错误预测为正常的数据,观察
能否找出一些问题。

15.7 多元高斯分布( 选修 )
参考视频: 15 - 7 - Multivariate Gaussian Distribution
在一般的高斯分布模型中,我们计算 ( ) p x 的方法是: 通过分别计算每个特征对应的几
率然后将其累乘起来,在多元高斯分布模型中,我们将构建特征的协方差矩阵,用所有的特
征一起来计算 ( ) p x 。
我们首先计算所有特征的平均值,然后再计算协方差矩阵:
多元高斯分布模型与原高斯分布模型的关系:
可以证明的是,原本的高斯分布模型是多元高斯分布模型的一个子集,即像上图中的第
1、2、3,3 个例子所示,如果协方差矩阵只在对角线的单位上有非零的值时,即为原本的
高斯分布模型了


15.8 使用多元高斯分布进行异常检测( 选修 )
参考视频: 15 - 8 - Anomaly Detection using the Multivariate Gaussian Distribution


十六 推荐系统( ( Recommender Systems) )
16.1  问题形式化
参考视频: 16 - 1 - Problem Formulation
推荐系统是机器学习中的一个重要的应用。


16.2 基于内容的推荐系统
参考视频: 16 - 2 - Content Based Recommendations


16.3 协同过滤
参考视频: 16 - 3 - Collaborative Filtering

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

16.4 协同过滤算法
参考视频: 16 - 4 - Collaborative Filtering Algorithm

16.5  向 量化:低秩矩阵分解
参考视频: 16 - 5 - Vectorization_ Low Rank Matrix Factorization
我将要做的是:实现一种选择的方法,写出协同过滤算法的预测情况。

16.6 推行工作上的细节:均值归一化
参考视频: 16 - 6 - Implementational Detail_ Mean Normalization
如果我们新增一个用户 Eve,并且 Eve 没有为任何电影评分,那么我们以什么为依据
为 Eve 推荐电影呢?
我们首先需要对结果 Y 矩阵进行均值归一化处理,将每一个用户对某一部电影的评分
减去所有 用户对该电影评分的平均值

十七 大规模机器学习( ( Large Scale Machine Learning) )
17.1  大型数据集的学习
参考视频: 17 - 1 - Learning With Large Datasets
如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果。我们应
该怎样应对一个有 100 万条记录的训练集?
以线性回归模型为例,每一次梯度下降迭代,我们都需要计算训练集的误差的平方和,
如果我们的学习算法需要有 20 次迭代,这便已经是非常大的计算代价。
首先应该做的事是去检查一个这么大规模的训练集是否真的必要,也许我们只用 1000
个训练集也能获得较好的效果,我们可以绘制学习曲线来帮助判断。

17.2 随机梯度下降法
参考视频: 17 - 2 - Stochastic Gradient Descent
如果我们一定需要一个大规模的训练集,我们可以尝试使用随机梯度下降法来代替批量
梯度下降法

随机梯度下降算法在每一次计算之后便更新参数 θ,而不需要首先将所有的训练集求和,
在梯度下降算法还没有完成一次迭代时,随机梯度下降算法便已经走出了很远

17.3  小 批量梯度下降
参考视频: 17 - 3 - Mini-Batch Gradient Descent
小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法,每计算
常数 b 次训练实例,便更新一次参数 θ。
通常我们会令 b 在 2-100 之间。这样做的好处在于,我们可以用向量化的方式来循环
b 个训练实例,如果我们用的线性代数函数库比较好,能够支持平行处理,那么算法的总体
表现将不受影响(与随机梯度下降相同)。

17.4 随机梯度下降收敛
参考视频: 17 - 4 - Stochastic Gradient Descent Convergence

现在我们介绍随机梯度下降算法的调试,以及学习率 α 的选取。
在批量梯度下降中,我们可以令代价函数 J 为迭代次数的函数,绘制图表,根据图表来
判断梯度下降是否收敛。但是,在大规模的训练集的情况下,这是不现实的,因为计算代价
太大了。
在随机梯度下降中,我们在每一次更新  之前都计算一次代价,然后每 X 次迭代后,求
出这 X 次对训练实例计算代价的平均值,然后绘制这些平均值与 X 次迭代的次数之间的函
数图表。

近似地监测出随机梯度下降算法在最优化
代价函数中的表现,这种方法不需要定时地扫描整个训练集,来算出整个样本集的代价函数,
而是只需要每次对最后 1000 个,或者多少个样本,求一下平均值。应用这种方法,你既可
以保证随机梯度下降法正在正常运转和收敛,也可以用它来调整学习速率α的大小。

17.5 在线学习
参考视频: 17 - 5 - Online Learning (
 大规模的机器学习机制,叫做在线学习机制。在线学习机
制让我们可以模型化问题。
如果你有一个由连续的用户流
引发的连续的数据流,进入你的网站,你能做的是使用一个在线学习机制,从数据流中学习
用户的偏好,然后使用这些信息来优化一些关于网站的决策
一个算法来从中学习的时候来模型化问题在线学习算法指的是对数据流而非离线的静
态数据集的学习。许多在线网站都有持续不断的用户流,对于每一个用户,网站希望能在不
将数据存储到数据库中便顺利地进行算法学习。
类似从流水中淘金一样,哈哈

你会看到
大公司会获取如此多的数据,真的没有必要来保存一个固定的数据集,取而代之的是你可以
使用一个在线学习算法来连续的学习,从这些用户不断产生的数据中来学习。这就是在线学
习机制

17.6 映射化简和数据并行
参考视频: 17 - 6 - Map Reduce and Data Parallelism
如果我们能够将我们的数据集分配给不多台
计算机,让每一台计算机处理数据集的一个子集,然后我们将计所的结果汇总在求和。这样
的方法叫做映射简化。

十八章  应用实例:图片 文字识别( ( Application Example: Photo OCR) )
18.1  问题描述和流程图
参考视频: 18 - 1 - Problem Description and Pipeline

为了完成这样的工作,需要采取如下步骤:
1.  文字侦测(Text detection)——将图片上的文字与其他环境对象分离开来
2.  字符切分(Character segmentation)——将文字分割成一个个单一的字符
3.  字符分类(Character classification)——确定每一个字符是什么

18.2 滑动窗口
参考视频: 18 - 2 - Sliding Windows
滑动窗口是一项用来从图像中抽取对象的技术。假使我们需要在一张图片中识别行人,
首先要做的是用许多固定尺寸的图片来训练一个能够准确识别行人的模型。然后我们用之前
训练识别行人的模型时所采用的图片尺寸在我们要进行行 人识别的图片上进行剪裁,然后
将剪裁得到的切片交给模型,让模型判断是否为行人,然后在图片上滑动剪裁区域重新进行
剪裁,将新剪裁的切片也交给模型进行判断,如此循环直至将图片全部检测完。
一旦完成后,我们按比例放大剪裁的区域,再以新的尺寸对图片进行剪裁,将新剪裁的
切片按比例缩小至模型所采纳的尺寸,交给模型进行判断,如此循环。

滑动窗口技术也被用于文字识别

18.3 获取大量数据和人工数据
参考视频: 18 - 3 - Getting Lots of Data and Artificial Data
以我们的文字识别应用为例,我们可以字体网站下载各种字体,然后利用这些不同的字
体配上各种不同的随机背景图片创造出一些用于训练的实例,这让我们能够获得一个无限大
的训练集。这是从零开始创造实例。
另一种方法是,利用已有的数据,然后对其进行修改,例如将已有的字符图片进行一些
扭曲、旋转、模糊处理。只要我们认为实际数据有可能和经过这样处理后的数据类似,我们
便可以用这样的方法来创造大量的数据。
有关获得更多数据的几种方法:
1.  人工数据合成
2.  手动收集、标记数据
3.  众包

18.4 上限分析:哪部分管道的接 下去做
参考视频: 18 - 4 - Ceiling Analysis_ What Part of the Pipeline to Work on Next
在机器学习的应用中,我们通常需要通过几个步骤才能进行最终的预测,我们如何能够
知道哪一部分最值得我们花时间和精力去改善呢?这个问题可以通过上限分析来回答。

十九、总结( ( Conclusion) )
19.1  总结和致谢
参考视频: 19 - 1 - Summary and Thank You









猜你喜欢

转载自blog.csdn.net/btujack/article/details/80310360