吴恩达MachineLearning-week1

原笔记网址:https://scruel.gitee.io/ml-andrewng-notes/week1.html

红色字体为自己的标注、绿色字体为自己的感想。

目录

 1.引言(Introduction)

2 单变量线性回归(Linear Regression with One Variable)

3 Linear Algebra Review

1. 引言(Introduction)

1.1 Welcome

随着互联网数据不断累积,硬件不断升级迭代,在这个信息爆炸的时代,机器学习已被应用在各行各业中,可谓无处不在。

一些常见的机器学习的应用,例如:

  • 手写识别
  • 垃圾邮件分类
  • 搜索引擎
  • 图像处理

使用到机器学习的一些案例:

  • 数据挖掘
    • 网页点击流数据分析
  • 人工无法处理的工作(量大)
    • 手写识别
    • 计算机视觉
  • 个人定制
    • 推荐系统
  • 研究大脑
  • ……

1.2 什么是机器学习(What is Machine Learning)

  1. 机器学习定义 这里主要有两种定义:
  • Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.

这个定义有点不正式但提出的时间最早,来自于一个懂得计算机编程的下棋菜鸟。他编写了一个程序,但没有显式地编程每一步该怎么走,而是让计算机自己和自己对弈,并不断地计算布局的好坏,来判断什么情况下获胜的概率高,从而积累经验,好似学习,最后,这个计算机程序成为了一个比他自己还厉害的棋手。

  • Tom Mitchell (1998) Well-posed Learning Problem: A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.

Tom Mitchell 的定义更为现代和正式。在过滤垃圾邮件这个例子中,电子邮件系统会根据用户对电子邮件的标记(是/不是垃圾邮件)不断学习,从而提升过滤垃圾邮件的准确率,定义中的三个字母分别代表:

    • T(Task): 过滤垃圾邮件任务。
    • P(Performance): 电子邮件系统过滤垃圾邮件的准确率。
    • E(Experience): 用户对电子邮件的标记。

              为了实现任务T:过滤垃圾邮件,通过学习得到经验E:学习用户对电子邮件的标记,而得到模型的性能P的判断基于:模型对于垃圾邮件筛选的正确率。

  1. 机器学习算法

主要有两种机器学习的算法:监督学习和无监督学习

两者的区别为是否需要人工参与数据结果的标注。这两部分的内容占比很大,并且很重要,掌握好了可以在以后的应用中节省大把大把的时间~

还有一些算法也属于机器学习领域,诸如:

    • 半监督学习: 介于监督学习于无监督学习之间
    • 推荐算法Recomender Algorithm: 没错,就是那些个买完某商品后还推荐同款的某购物网站所用的算法。
    • 强化学习Reinforcement Learning: 通过观察来学习如何做出动作,每个动作都会对环境有所影响,而环境的反馈又可以引导该学习算法。比如观察如何拿起杯子喝一口水,学习该动作执行后,杯内水的容量发生改变,环境改变,反馈给算法,接下来再喝水,应该将杯子倾斜的角度加大。
    • 迁移学习

1.3 监督学习(Supervised Learning)

监督学习,即为教计算机如何去完成预测任务(有反馈),预先给一定数据量的输入和对应的结果即训练集,建模拟合,最后让计算机预测未知数据的结果。

我们被告知一些正确答案(示例),通过分析这些正确答案,得到算法。算法再进行预测,解答用户的问题得到答案。监督学习和非监督学习的区别就是是否在初始时给出正确答案(示例)。前者的算法是通过正确答案得到,后者的算法是通过大量数据获得

监督学习一般有两种:

1.回归问题(Regression)

回归问题即为预测一系列的连续值可以理解为输出的值(结果)是连续的值。

在房屋价格预测的例子中,给出了一系列的房屋面基数据,根据这些数据来预测任意面积的房屋价格。给出照片-年龄数据集,预测给定照片的年龄。 

2.分类问题(Classification)

分类问题即为预测一系列的离散值得到的结果是离散的。

即根据数据预测被预测对象属于哪个分类。

视频中举了癌症肿瘤这个例子,针对诊断结果,分别分类为良性或恶性。还例如垃圾邮件分类问题,也同样属于监督学习中的分类问题。

 

Example 1:

 

(a)Regression-Given data about the size of houses on the real estate market, try to predict their price. Price as a function of size is a continuous output, so this is a regression problem根据房屋面积预测房屋价格,价格是连续值,故为回归问题

(b)Classification-We could turn this example into a classification problem by instead making our output about whether the house "sells for more or less than the asking price." Here we are classifying the houses based on price into two discrete categories.根据价格比预期低或高返回结果,是离散值,故为分类问题

Example 2:

(a) Regression - Given a picture of a person, we have to predict their age on the basis of the given picture根据照片判断人的年龄,我们将年龄视为“连续值”(因为其具有多个可能性),故为回归问题。

(b) Classification - Given a patient with a tumor, we have to predict whether the tumor is malignant or benign.根据肿瘤的照片预测患者肿瘤良性还是恶性,这是离散的两个答案,因此是分类问题。

视频中提到支持向量机这个算法,旨在解决当特征量很大的时候(特征即如癌症例子中的肿块大小,颜色,气味等各种特征),计算机内存一定会不够用的情况。支持向量机能让计算机处理无限多个特征

1.4 无监督学习(Unsupervised Learning)

相对于监督学习,训练集不会有人为标注的结果(无反馈),我们不会给出结果或无法得知训练集的结果是什么样,而是单纯由计算机通过无监督学习算法自行分析,从而“得出结果”。计算机可能会把特定的数据集归为几个不同的类型。初始时,不给出正确结果(数据),直接对数据进行分析,根据数据的结构,自动总结出算法将其分成不同的类。

无监督学习一般分为两种:

  1. 聚类(Clustering):数据不重叠,对这些数据直接根据结构,划分成不同的类别的簇。
    • 新闻聚合
    • DNA 个体聚类
    • 天文数据分析
    • 市场细分
    • 社交网络分析
  2. 非聚类(Non-clustering):数据重叠,无法直接对数据标识类别,而是将重叠的数据分别剥离出来,从而得到不同的类别。
    • 鸡尾酒问题

新闻聚合

在例如谷歌新闻这样的网站中,每天后台都会收集成千上万的新闻,然后将这些新闻分组成一个个的新闻专题,这样一个又一个聚类,就是应用了无监督学习的结果。

鸡尾酒问题

 

在鸡尾酒会上,大家说话声音彼此重叠,几乎很难分辨出面前的人说了什么。我们很难对于这个问题进行数据标注,而这里的通过机器学习的无监督学习算法,就可以将说话者的声音同背景音乐分离出来。

 

而这一切只需要一行代码就能实现: [W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');

编程语言建议

在机器学习刚开始时,推荐使用 Octave 类的工程计算编程软件,因为在 C++ 或 Java 等编程语言中,编写对应的代码需要用到复杂的库以及要写大量的冗余代码,比较耗费时间,建议可以在学习过后再考虑使用其他语言来构建系统。 另外,在做原型搭建的时候也应该先考虑使用类似于 Octave 这种便于计算的编程软件,当其已经可以工作后,才将模型移植到其他的高级编程语言中。

注:Octave 与 MATLAB 语法相近,由于 MATLAB 为商业软件,课程中使用开源且免费的 Octave。

机器学习领域发展迅速,现在也可使用 Tensorflow 等开源机器学习框架编写机器学习代码,这些框架十分友好,易于编写及应用。

2 单变量线性回归(Linear Regression with One Variable)

2.1 模型表示(Model Representation)

  1. 房价预测训练集

Size in ( )

Price ($) in 1000's( )

2104

460

1416

232

1534

315

852

178

...

...

房价预测训练集中,同时给出了输入x和输出y ,即给出了人为标注的”正确结果“,且预测的量是连续的,属于监督学习中的回归问题。

x:输入变量/特征变量

  1. 问题解决模型

 

2.2 代价函数(Cost Function)

李航《统计学习方法》一书中,损失函数与代价函数两者为同一概念,未作细分区别,全书没有和《深度学习》一书一样混用,而是统一使用损失函数来指代这类类似概念。

吴恩达(Andrew Ng)老师在其公开课中对两者做了细分。如果要听他的课做作业,不细分这两个概念是会被打小手扣分的!这也可能是因为老师发现了业内混用的乱象,想要治一治吧。

损失函数(Loss/Error Function): 计算单个样本的误差。

代价函数(Cost Function): 计算整个训练集所有损失函数之和的平均值

我们的目的在于求解预测结果h最接近于实际结果y时的取值,则问题可表达为求解的最小值。

 

 

 

对于大多数线性回归问题来说,这个平方差代价函数是最适合的代价函数,可以解决大多数线性回归问题。接下来我们讨论更多类型的代价函数。

2.3 代价函数 - 直观理解1(Cost Function - Intuition I)

在这一节,我们将假设函数h的设置为0,从而假设函数只有一个变量,在上图左表(为固定值,x为变量,y为因变量)中,绘制假设函数h以及数据集(x,y),各点的垂直差决定了右表(为自变量)中代价函数J的曲线。而我们的目标就是令代价函数得到最小值。

2.4 代价函数 - 直观理解2(Cost Function - Intuition II)

注:该部分由于涉及到了多变量成像,可能较难理解,要求只需要理解上节内容即可,该节如果不能较好理解可跳过。

当代价函数的参数变成两个后,代价函数J的图像变成了三维,为了更方便地分析,我们将其转化为轮廓图。

在轮廓图中,每一条曲线代表了相同的代价值。每条曲线上的各点的两个参数虽不相同,但是他们的代价值是一样的。我们可以理解为,它是将上面的图投影在面上得到的曲线(轮廓图中虽然没有直接写出代价值,但是将某曲线上任一点带入代价函数J,我们就可以得到这条曲线上所有点的代价值)。不难发现,代价值最小的点就是轮廓图中椭圆的中心,也是3-D图中最接近面的那一点。

2.5 梯度下降(Gradient Descent)

在特征量很大的情况下,即便是借用计算机来生成图像,人工的方法也很难读出的最小值,并且大多数情况无法进行可视化,故引入梯度下降(Gradient Descent)方法,让计算机自动找出最小化代价函数时对应的 值。

梯度下降背后的思想是:开始时,我们随机选择一个参数组合即起始点,计算代价函数,然后寻找下一个能使得代价函数下降最多的参数组合。不断迭代,直到找到一个局部最小值(local minimum),由于下降的情况只考虑当前参数组合周围的情况,所以无法确定当前的局部最小值是否就是全局最小值(global minimum),不同的初始参数组合,可能会产生不同的局部最小值。

下图根据不同的起始点,产生了两个不同的局部最小值。

视频中举了下山的例子,即我们在山顶上的某个位置,为了下山,就不断地看一下周围下一步往哪走下山比较快,然后就迈出那一步,一直重复,直到我们到达山下的某一处陆地

梯度下降公式:

公式中,学习速率决定了参数值变化的速率即”走多少距离“,而偏导这部分决定了下降的方向即”下一步往哪里“走(当然实际上的走多少距离是由偏导值给出的,学习速率起到调整后决定的作用),收敛处的局部最小值又叫做极小值,即”陆地“。

注意:一定要将同步更新!左图是正确的,右图是错误的(若先更新,那么使用的将是修改后的。这可能不会在代码上有什么错,但是这和我们说的梯度下降并不是一个概念,可能会出现微弱的误差。)

2.6 梯度下降直观理解(Gradient Descent Intuition)

下面我们令=0,将J转为只关于变量的函数。

该算法给定一个初值 ,得到对应的J()。接着通过该点的导数,我们将往局部最小值方向移动,得到了一个新的。重复以上步骤,直到到达局部最小值点。

学习速率只需选定即可,不需要在运行梯度下降算法的时候进行动态改变,随着斜率越来越接近于0,代价函数的变化幅度会越来越小,直到收敛到局部极小值。到达局部极小值后,此时导数为零,则不会改变。不必担心到达最小值后又移动到其他点。

如图,玫红色点为初始点,代价函数随着迭代的进行,变化的幅度越来越小。随着越来越接近最小值点,导数越来越小,则变化得幅度也越来越小,即移动的步伐越来越小,直到找到局部极小值点。

最后,梯度下降不止可以用于线性回归中的代价函数,还通用于最小化其他的代价函数。

2.7 线性回归中的梯度下降(Gradient Descent For Linear Regression)

回顾之前的内容,我们可以得到梯度下降算法以及线性回归模型:

我们使用梯度下降方法来得到线性回归模型的最小值,即将线性回归模型公式代入梯度下降公式:

可得出梯度下降公式:

上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用所有的数据集更新。

由于线性回归函数呈现碗状,且只有一个全局的最优值,所以函数一定总会收敛到全局最小值(学习速率不可过大)。同时,函数J称为凸二次函数,而线性回归函数求解最小值问题属于凸函数优化问题

另外,使用循环求解,代码较为冗余,后面会讲到如何使用向量化(Vectorization)来简化代码并优化计算,使梯度下降运行的更快更好。

3 线性代数复习

1.向量是1xN维的,一定只有一列。可以只用R4(下标)来表示4x1的向量。yi(下标)表示向量的第几个元素。

2.默认使用1-索引法表示向量,机器学习常用0-索引法。

3.一般使用大写字母表示矩阵,小写字母表示数字或者标量,向量。

3.代码:

 

注意最后一个,常数可以与矩阵进行加减。直接令矩阵中每一项加上这个常数就行了。

单位矩阵的定义方法。不必自己写出每个元素,直接使用eye()即可。

4.

如上图所示,我们在批量预测房子的价格时,可以使用高等代数的内容,使得代码更简洁,效率更高。如上图,左边的方法优于右边for循环的方法。

这个方法:预测值=数据矩阵 * 参数向量

5.

和之前相比,我们将参数向量拓展到了参数矩阵,得到数据集在不同假设下的结果集。这就实现了批量处理多个假设,从而令梯度下降也能通过高等代数的方法用一行代码实现。

这个方法:预测值=数据矩阵 * 参数矩阵

6.只有不为零的方针才有逆矩阵(inverse matrix)。不存在逆矩阵的矩阵,我们一般称为奇异矩阵(singular)或者退化矩阵(degenerate)。

注意逆与转置的算法符号,A',inv(A)。此外,inv(A)*A得到的单位矩阵虽然不是显示的标准的单位矩阵,但这是由于计算机近似计算下导致的,实际上就是单位矩阵。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值