Coursera-AndrewNg(吴恩达)机器学习第一周笔记

文章目录

  • 1. 引言(Introduction)
    • 1.1 Welcome
    • 1.2 什么是机器学习(What is Machine Learning)
    • 1.3 监督学习(Supervised Learning)
    • 1.4 无监督学习(Unsupervised Learning)
  • 2 单变量线性回归(Linear Regression with One Variable)
    • 2.1 模型表示(Model Representation)
    • 2.2 损失函数(Cost Function)
    • 2.3 损失函数 - 直观理解1(Cost Function - Intuition I)
    • 2.4 损失函数 - 直观理解2(Cost Function - Intuition II)
    • 2.5 梯度下降(Gradient Descent)
    • 2.6 梯度下降直观理解(Gradient Descent Intuition)
    • 2.7 线性回归中的梯度下降(Gradient Descent For Linear Regression)
  • 3 Linear Algebra Review
    • 3.1 Matrices and Vectors
    • 3.2 Addition and Scalar Multiplication
    • 3.3 Matrix Vector Multiplication
    • 3.4 Matrix Matrix Multiplication
    • 3.5 Matrix Multiplication Properties
    • 3.6 Inverse and Transpose

声明:
本人所作的所有笔记内容禁止任何商业形式的转载,非商业形式的转载请先联系我授权,在承诺不会用于商业用途后方可使用,且需声明转载地址(GitHub)。
笔记对外暂且只发布第一周的笔记,后续可能会陆续发布。

该笔记项目耗费了本人的大量时间,请尊重原作者,拒绝并抵制侵权行为,欢迎私信举报。

如需查阅完整笔记项目,请至:
GitHub 笔记项目地址

觉得不错,不如请我喝杯咖啡:

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): 用户对于邮件进行是否为垃圾邮件的分类(即帮助机器体验、学习)。
  1. 机器学习算法

    主要有两种机器学习的算法分类

    1. 监督学习
    2. 无监督学习

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

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

    • 半监督学习: 介于监督学习于无监督学习之间
    • 推荐算法: 没错,就是那些个买完之后还推荐同一款商品的某购物平台。
    • 强化学习: 通过观察来学习如何做出动作,每个动作都会对环境有所影响,而环境的反馈又可以引导该学习算法。
    • 迁移学习

1.3 监督学习(Supervised Learning)

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

监督学习一般有两种:

  1. 回归问题(Regression)

    回归问题即为预测一系列的连续值

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

  1. 分类问题(Classification)

    分类问题即为预测一系列的离散值

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

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

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

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 f e e t 2 feet^2 feet2 ( x x x) Price ($) in 1000’s( y y y)
2104 460
1416 232
1534 315
852 178

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

  1. 问题解决模型

其中 h h h 代表结果函数,也称为假设(hypothesis) 。这个函数 h h h 根据输入(房屋的面积),给出预测结果输出(房屋的价格),即是一个 X → Y X\to Y XY 的映射。

h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x,为其中一种可行的表达式。

x x x: 特征/输入变量。

上式中, θ \theta θ 为参数, θ \theta θ 的变化才决定了输出结果,不同以往,这里的 x x x 被我们视作已知(不论是数据集还是预测前的输入),所以怎样解得 θ \theta θ 以更好地拟合数据,成了求解该问题的最终问题。

单变量,即只有一个特征(如例子中房屋的面积这个特征)。

2.2 损失函数(Cost Function)

我们的目的在于求解预测结果 h θ ( x ) h_\theta(x) hθ(x) 最接近于实际结果 y y y θ \theta θ 的取值,则问题可表达为求解 ∑ i = 0 m ( h θ ( x ( i ) ) − y ( i ) ) \sum\limits_{i=0}^{m}(h_\theta(x^{(i)})-y^{(i)}) i=0m(hθ(x(i))y(i)) 的最小值

m m m: 训练集中的样本总数

y y y: 目标变量/输出变量

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

( x ( i ) , y ( i ) ) \left(x^{\left(i\right)},y^{\left(i\right)}\right) (x(i),y(i)): 训练集中的第 i i i 个样本实例

上图展示了当 θ \theta θ 取不同值时, h θ ( x ) h_\theta\left(x\right) hθ(x) 对数据集的拟合情况,蓝色虚线部分代表建模误差(预测结果与实际结果之间的误差),我们的目标就是最小化所有误差之和。

为了求解最小值,引入损失函数(Cost Function)概念,用于度量建模误差。考虑到要计算最小值,应用二次函数对求和式建模,即应用统计学中的平方损失函数(最小二乘法):

J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( y ^ i − y i ) 2 = 1 2 m ∑ i = 1 m ( h θ ( x i ) − y i ) 2 J(\theta_0, \theta_1) = \dfrac {1}{2m} \displaystyle \sum _{i=1}^m \left ( \hat{y}_{i}- y_{i} \right)^2 = \dfrac {1}{2m} \displaystyle \sum _{i=1}^m \left (h_\theta (x_{i}) - y_{i} \right)^2 J(θ0,θ1)=2m1i=1m(y^iyi)2=2m1i=1m(hθ(xi)yi)2

系数 1 2 \frac{1}{2} 21 存在与否都不会影响结果,这里是为了在应用梯度下降时便于求解,平方的导数会抵消掉 1 2 \frac{1}{2} 21

讨论到这里,我们的问题就转化成了求解 J ( θ 0 , θ 1 ) J\left( \theta_0, \theta_1 \right) J(θ0,θ1) 的最小值

2.3 损失函数 - 直观理解1(Cost Function - Intuition I)

根据上节视频,列出如下定义:

  • 假设函数(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\left( \theta_0, \theta_1 \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2
  • 目标(Goal): minimize θ 0 , θ 1 J ( θ 0 , θ 1 ) \underset{\theta_0, \theta_1}{\text{minimize}} J \left(\theta_0, \theta_1 \right) θ0,θ1minimizeJ(θ0,θ1)

为了直观理解损失函数到底是在做什么,先假设 θ 1 = 0 \theta_1 = 0 θ1=0,并假设训练集有三个数据,分别为 ( 1 , 1 ) , ( 2 , 2 ) , ( 3 , 3 ) \left(1, 1\right), \left(2, 2\right), \left(3, 3\right) (1,1),(2,2),(3,3),这样在平面坐标系中绘制出 h θ ( x ) h_\theta\left(x\right) hθ(x) ,并分析 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) 随着 θ 1 \theta_1 θ1 的变化而变化,可见 θ 1 = 1 \theta_1 = 1 θ1=1 时, J ( θ 0 , θ 1 ) = 0 J\left(\theta_0, \theta_1 \right) = 0 J(θ0,θ1)=0,取得最小值,对应于左图青色直线,即函数 h h h 拟合程度最好的情况。

2.4 损失函数 - 直观理解2(Cost Function - Intuition II)

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

给定数据集:

参数在 θ 0 \theta_0 θ0 不恒为 0 0 0 时损失函数 J ( θ ) J\left(\theta\right) J(θ) 关于 θ 0 , θ 1 \theta_0, \theta_1 θ0,θ1 的 3-D 图像,图像中的高度为损失函数的值。

由于3-D图形不便于标注,所以将3-D图形转换为轮廓图(contour plot),下面用轮廓图(下图中的右图)来作直观理解,其中相同颜色的一个圈代表着同一高度(同一 J ( θ ) J\left(\theta\right) J(θ) 值)。

θ 0 = 360 , θ 1 = 0 \theta_0 = 360, \theta_1 =0 θ0=360,θ1=0 时:

大概在 θ 0 = 0.12 , θ 1 = 250 \theta_0 = 0.12, \theta_1 =250 θ0=0.12,θ1=250 时:

上图中最中心的点(红点),近乎为图像中的最低点,也即损失函数的最小值,此时对应 h θ ( x ) h_\theta\left(x\right) hθ(x) 对数据的拟合情况如左图所示,嗯,一看就拟合的很不错,预测应该比较精准啦。

2.5 梯度下降(Gradient Descent)

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

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

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

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

给出梯度下降的公式:

​ repeat until convergence:
θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) {{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right) θj:=θjαθjJ(θ0,θ1)

θ j {\theta }_{j} θj: 第 j j j 个特征参数

”:=“: 赋值操作符

α \alpha α: 学习速率(learning rate), α > 0 \alpha > 0 α>0

∂ ∂ θ j J ( θ 0 , θ 1 ) \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right) θjJ(θ0,θ1): J ( θ 0 , θ 1 ) J\left( \theta_0, \theta_1 \right) J(θ0,θ1) 的偏导

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

这里非常重要的一个点是,在计算时要批量更新 θ \theta θ,否则结果上会有所出入,原因不做细究。

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

该节探讨 θ 1 \theta_1 θ1 的梯度下降更新过程,即 θ 1 : = θ 1 − α d d θ 1 J ( θ 1 ) \theta_1 := \theta_1 - \alpha\frac{d}{d\theta_1}J\left(\theta_1\right) θ1:=θ1αdθ1dJ(θ1),注意到这里为了数学定义上的精确性,用的是 d d θ 1 J ( θ 1 ) \frac{d}{d\theta_1}J\left(\theta_1\right) dθ1dJ(θ1),如果不熟悉微积分学,就把它视作之前的 ∂ ∂ θ \frac{\partial}{\partial\theta} θ 即可。

把红点定为初始点,切于初始点的红色直线的斜率,表示了函数 J ( θ ) J\left(\theta\right) J(θ) 在初始点处有正斜率,也就是说它有正导数,则根据梯度下降公式 , θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) {{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right) θj:=θjαθjJ(θ0,θ1) θ 1 \theta_1 θ1向左边移动。这样不断重复,直到收敛(达到局部最小值,即斜率为0)。

当然如果 θ \theta θ 值开始就在极小值点处时,梯度下降算法将什么也不做( θ 1 : = θ 1 − α ∗ 0 \theta_1 := \theta_1 - \alpha*0 θ1:=θ1α0)。

不熟悉斜率的话,就当斜率的值等于图中三角形的高度除以水平长度好啦,精确地求斜率的方法是求导。

另外,对于学习速率 α \alpha α ,需要选取一个合适的值才能使得梯度下降算法运行良好。

  • 学习速率过小:

    收敛的太慢,需要更多次的迭代。

  • 学习速率过大:

    可能越过最低点,甚至导致无法收敛。

学习速率只需选定即可,不需要在运行梯度下降算法的时候进行动态改变,随着斜率越来越接近于0,损失函数的变化幅度会越来越小,直到收敛到局部极小值。

如图,品红色点为初始点,损失函数随着迭代的进行,变化的幅度越来越小。

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

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

线性回归模型

  • h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1x hθ(x)=θ0+θ1x
  • J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J\left( \theta_0, \theta_1 \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} J(θ0,θ1)=2m1i=1m(hθ(x(i))y(i))2

梯度下降算法

  • θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 ) {{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right) θj:=θjαθjJ(θ0,θ1)

直接将线性回归模型公式带入梯度下降公式可得出公式

对于 j = 0 , j = 1 j = 0, j = 1 j=0,j=1 时,给出偏导计算公式的推导过程如下:

∂ ∂ θ j J ( θ 1 , θ 2 ) = ∂ ∂ θ j ( 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 ) = \frac{\partial}{\partial\theta_j} J(\theta_1, \theta_2)=\frac{\partial}{\partial\theta_j} \left(\frac{1}{2m}\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}} \right)= θjJ(θ1,θ2)=θj(2m1i=1m(hθ(x(i))y(i))2)=

( 1 2 m ∗ 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ) ∗ ∂ ∂ θ j ( h θ ( x ( i ) ) − y ( i ) ) = \left(\frac{1}{2m}*2\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}} \right)*\frac{\partial}{\partial\theta_j}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}} = (2m12i=1m(hθ(x(i))y(i)))θj(hθ(x(i))y(i))=

( 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ) ∗ ∂ ∂ θ j ( θ 0 x 0 ( i ) + θ 1 x 1 ( i ) − y ( i ) ) \left(\frac{1}{m}\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}} \right)*\frac{\partial}{\partial\theta_j}{{\left(\theta_0{x_0^{(i)}} + \theta_1{x_1^{(i)}}-{{y}^{(i)}} \right)}} (m1i=1m(hθ(x(i))y(i)))θj(θ0x0(i)+θ1x1(i)y(i))

所以当 j = 0 j = 0 j=0 时:

∂ ∂ θ 0 J ( θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ∗ x 0 ( i ) \frac{\partial}{\partial\theta_0} J(\theta)=\frac{1}{m}\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}} *x_0^{(i)} θ0J(θ)=m1i=1m(hθ(x(i))y(i))x0(i)

所以当 j = 1 j = 1 j=1 时:

∂ ∂ θ 1 J ( θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ∗ x 1 ( i ) \frac{\partial}{\partial\theta_1} J(\theta)=\frac{1}{m}\sum\limits_{i=1}^{m}{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}} *x_1^{(i)} θ1J(θ)=m1i=1m(hθ(x(i))y(i))x1(i)

上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用所有的数据集 ( ∑ i = 1 m ) \left(\sum\limits_{i=1}^{m}\right) (i=1m) 更新。

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

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

3 Linear Algebra Review

这部分,学过线性代数的可以复习一下,比较基础。笔记整理暂留。

3.1 Matrices and Vectors

Octave/Matlab 代码:

% The ; denotes we are going back to a new row.
A = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]

% Initialize a vector 
v = [1;2;3] 

% Get the dimension of the matrix A where m = rows and n = columns
[m,n] = size(A)

% You could also store it this way
dim_A = size(A)

% Get the dimension of the vector v 
dim_v = size(v)

% Now let's index into the 2nd row 3rd column of matrix A
A_23 = A(2,3)

执行结果:

A =

    1    2    3
    4    5    6
    7    8    9
   10   11   12

v =

   1
   2
   3

m =  4
n =  3
dim_A =

   4   3

dim_v =

   3   1

A_23 =  6

3.2 Addition and Scalar Multiplication

Octave/Matlab 代码:

% Initialize matrix A and B 
A = [1, 2, 4; 5, 3, 2]
B = [1, 3, 4; 1, 1, 1]

% Initialize constant s 
s = 2

% See how element-wise addition works
add_AB = A + B 

% See how element-wise subtraction works
sub_AB = A - B

% See how scalar multiplication works
mult_As = A * s

% Divide A by s
div_As = A / s

% What happens if we have a Matrix + scalar?
add_As = A + s

执行结果:

A =

   1   2   4
   5   3   2

B =

   1   3   4
   1   1   1

s =  2
add_AB =

   2   5   8
   6   4   3

sub_AB =

   0  -1   0
   4   2   1

mult_As =

    2    4    8
   10    6    4

div_As =

   0.50000   1.00000   2.00000
   2.50000   1.50000   1.00000

add_As =

   3   4   6
   7   5   4

3.3 Matrix Vector Multiplication

Octave/Matlab 代码:

% Initialize matrix A 
A = [1, 2, 3; 4, 5, 6;7, 8, 9] 

% Initialize vector v 
v = [1; 1; 1] 

% Multiply A * v
Av = A * v


执行结果:

A =

   1   2   3
   4   5   6
   7   8   9

v =

   1
   1
   1

Av =

    6
   15
   24

3.4 Matrix Matrix Multiplication

Octave/Matlab 代码:

% Initialize a 3 by 2 matrix 
A = [1, 2; 3, 4;5, 6]

% Initialize a 2 by 1 matrix 
B = [1; 2] 

% We expect a resulting matrix of (3 by 2)*(2 by 1) = (3 by 1) 
mult_AB = A*B

% Make sure you understand why we got that result

执行结果:

A =

   1   2
   3   4
   5   6

B =

   1
   2

mult_AB =

    5
   11
   17

3.5 Matrix Multiplication Properties

Octave/Matlab 代码:

% Initialize random matrices A and B 
A = [1,2;4,5]
B = [1,1;0,2]

% Initialize a 2 by 2 identity matrix
I = eye(2)

% The above notation is the same as I = [1,0;0,1]

% What happens when we multiply I*A ? 
IA = I*A 

% How about A*I ? 
AI = A*I 

% Compute A*B 
AB = A*B 

% Is it equal to B*A? 
BA = B*A 

% Note that IA = AI but AB != BA

执行结果:

A =

   1   2
   4   5

B =

   1   1
   0   2

I =

Diagonal Matrix

   1   0
   0   1

IA =

   1   2
   4   5

AI =

   1   2
   4   5

AB =

    1    5
    4   14

BA =

    5    7
    8   10

3.6 Inverse and Transpose

Octave/Matlab 代码:

% Initialize matrix A 
A = [1,2,0;0,5,6;7,0,9]

% Transpose A 
A_trans = A' 

% Take the inverse of A 
A_inv = inv(A)

% What is A^(-1)*A? 
A_invA = inv(A)*A


执行结果:

A =

   1   2   0
   0   5   6
   7   0   9

A_trans =

   1   0   7
   2   5   0
   0   6   9

A_inv =

   0.348837  -0.139535   0.093023
   0.325581   0.069767  -0.046512
  -0.271318   0.108527   0.038760

A_invA =

   1.00000  -0.00000   0.00000
   0.00000   1.00000  -0.00000
  -0.00000   0.00000   1.00000

你可能感兴趣的:(Coursera-AndrewNg(吴恩达)机器学习第一周笔记)