You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

week1.md 23 kB

8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678
  1. [TOC]
  2. # 1. 引言(Introduction)
  3. ## 1.1 Welcome
  4. 随着互联网数据不断累积,硬件不断升级迭代,在这个信息爆炸的时代,机器学习已被应用在各行各业中,可谓无处不在。
  5. 一些常见的机器学习的应用,例如:
  6. - 手写识别
  7. - 垃圾邮件分类
  8. - 搜索引擎
  9. - 图像处理
  10. - …
  11. 使用到机器学习的一些案例:
  12. - 数据挖掘
  13. - 网页点击流数据分析
  14. - 人工无法处理的工作(量大)
  15. - 手写识别
  16. - 计算机视觉
  17. - 个人定制
  18. - 推荐系统
  19. - 研究大脑
  20. - ……
  21. ## 1.2 什么是机器学习(What is Machine Learning)
  22. 1. 机器学习定义
  23. 这里主要有两种定义:
  24. - Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.
  25. 这个定义有点不正式但提出的时间最早,来自于一个懂得计算机编程的下棋菜鸟。他编写了一个程序,但没有显式地编程每一步该怎么走,而是让计算机自己和自己对弈,并不断地计算布局的好坏,来判断什么情况下获胜的概率高,从而积累经验,好似学习,最后,这个计算机程序成为了一个比他自己还厉害的棋手。
  26. - 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**.
  27. Tom Mitchell 的定义更为现代和正式。在过滤垃圾邮件这个例子中,电子邮件系统会根据用户对电子邮件的标记(是/不是垃圾邮件)不断学习,从而提升过滤垃圾邮件的准确率,定义中的三个字母分别代表:
  28. - T(Task): 过滤垃圾邮件任务。
  29. - P(Performance): 电子邮件系统过滤垃圾邮件的准确率。
  30. - E(Experience): 用户对电子邮件的标记。
  31. 2. 机器学习算法
  32. 主要有两种机器学习的算法分类
  33. 1. 监督学习
  34. 2. 无监督学习
  35. 两者的区别为**是否需要人工参与数据结果的标注**。这两部分的内容占比很大,并且很重要,掌握好了可以在以后的应用中节省大把大把的时间~
  36. 还有一些算法也属于机器学习领域,诸如:
  37. - 半监督学习: 介于监督学习于无监督学习之间
  38. - 推荐算法: 没错,就是那些个买完某商品后还推荐同款的某购物网站所用的算法。
  39. - 强化学习: 通过观察来学习如何做出动作,每个动作都会对环境有所影响,而环境的反馈又可以引导该学习算法。
  40. - 迁移学习
  41. ## 1.3 监督学习(Supervised Learning)
  42. 监督学习,即为教计算机如何去完成预测任务(有反馈),预先给一定数据量的输入**和对应的结果**即训练集,建模拟合,最后让计算机预测未知数据的结果。
  43. 监督学习一般有两种:
  44. 1. 回归问题(Regression)
  45. 回归问题即为预测一系列的**连续值**。
  46. 在房屋价格预测的例子中,给出了一系列的房屋面积数据,根据这些数据来预测任意面积的房屋价格。给出照片-年龄数据集,预测给定照片的年龄。
  47. ![](images/20180105_194712.png)
  48. 2. 分类问题(Classification)
  49. 分类问题即为预测一系列的**离散值**。
  50. 即根据数据预测被预测对象属于哪个分类。
  51. 视频中举了癌症肿瘤这个例子,针对诊断结果,分别分类为良性或恶性。还例如垃圾邮件分类问题,也同样属于监督学习中的分类问题。
  52. ![](images/20180105_194839.png)
  53. 视频中提到**支持向量机**这个算法,旨在解决当特征量很大的时候(特征即如癌症例子中的肿块大小,颜色,气味等各种特征),计算机内存一定会不够用的情况。**支持向量机能让计算机处理无限多个特征。**
  54. ## 1.4 无监督学习(Unsupervised Learning)
  55. 相对于监督学习,训练集不会有人为标注的结果(无反馈),我们**不会给出**结果或**无法得知**训练集的结果是什么样,而是单纯由计算机通过无监督学习算法自行分析,从而“得出结果”。计算机可能会把特定的数据集归为几个不同的簇,故叫做聚类算法。
  56. 无监督学习一般分为两种:
  57. 1. 聚类(Clustering)
  58. - 新闻聚合
  59. - DNA 个体聚类
  60. - 天文数据分析
  61. - 市场细分
  62. - 社交网络分析
  63. 2. 非聚类(Non-clustering)
  64. - 鸡尾酒问题
  65. **新闻聚合**
  66. 在例如谷歌新闻这样的网站中,每天后台都会收集成千上万的新闻,然后将这些新闻分组成一个个的新闻专题,这样一个又一个聚类,就是应用了无监督学习的结果。
  67. **鸡尾酒问题**
  68. ![](images/20180105_201639.png)
  69. 在鸡尾酒会上,大家说话声音彼此重叠,几乎很难分辨出面前的人说了什么。我们很难对于这个问题进行数据标注,而这里的通过机器学习的无监督学习算法,就可以将说话者的声音同背景音乐分离出来,看视频,效果还不错呢\~~。
  70. 嗯,这块是打打鸡血的,只需要一行代码就解决了问题,就是这么简单!当然,我没复现过 ^_^……
  71. 神奇的一行代码:
  72. `[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');`
  73. **编程语言建议**
  74. 在机器学习刚开始时,**推荐使用 Octave 类的工程计算编程软件**,因为在 C++ 或 Java 等编程语言中,编写对应的代码需要用到复杂的库以及要写大量的冗余代码,比较耗费时间,建议可以在学习过后再考虑使用其他语言来构建系统。
  75. 另外,在做**原型搭建**的时候也应该先考虑使用类似于 Octave 这种便于计算的编程软件,当其已经可以工作后,才将模型移植到其他的高级编程语言中。
  76. > 注:Octave 与 MATLAB 语法相近,由于 MATLAB 为商业软件,课程中使用开源且免费的 Octave。
  77. >
  78. > 机器学习领域发展迅速,现在也可使用 Tensorflow 等开源机器学习框架编写机器学习代码,这些框架十分友好,易于编写及应用。
  79. # 2 单变量线性回归(Linear Regression with One Variable)
  80. ## 2.1 模型表示(Model Representation)
  81. 1. 房价预测训练集
  82. | Size in $feet^2$ ($x$) | Price (\$) in 1000's($y$) |
  83. | ---------------------- | ------------------------- |
  84. | 2104 | 460 |
  85. | 1416 | 232 |
  86. | 1534 | 315 |
  87. | 852 | 178 |
  88. | ... | ... |
  89. 房价预测训练集中,同时给出了输入 $x$ 和输出结果 $y$,即给出了人为标注的**”正确结果“**,且预测的量是连续的,属于监督学习中的回归问题。
  90. 2. **问题解决模型**
  91. ![](images/20180105_212048.png)
  92. 其中 $h$ 代表结果函数,也称为**假设(hypothesis)** 。假设函数根据输入(房屋的面积),给出预测结果输出(房屋的价格),即是一个 $X\to Y$ 的映射。
  93. $h_\theta(x)=\theta_0+\theta_1x$,为解决房价问题的一种可行表达式。
  94. > $x$: 特征/输入变量。
  95. 上式中,$\theta$ 为参数,$\theta$ 的变化才决定了输出结果,不同以往,这里的 $x$ 被我们**视作已知**(不论是数据集还是预测时的输入),所以怎样解得 $\theta$ 以更好地拟合数据,成了求解该问题的最终问题。
  96. 单变量,即只有一个特征(如例子中房屋的面积这个特征)。
  97. ## 2.2 代价函数(Cost Function)
  98. > 李航《统计学习方法》一书中,损失函数与代价函数两者为**同一概念**,未作细分区别,全书没有和《深度学习》一书一样混用,而是统一使用**损失函数**来指代这类类似概念。
  99. >
  100. > 吴恩达(Andrew Ng)老师在其公开课中对两者做了细分。**如果要听他的课做作业,不细分这两个概念是会被打小手扣分的**!这也可能是因为老师发现了业内混用的乱象,想要治一治吧。
  101. >
  102. > **损失函数**(Loss/Error Function): 计算**单个**样本的误差。[link](https://www.coursera.org/learn/neural-networks-deep-learning/lecture/yWaRd/logistic-regression-cost-function)
  103. >
  104. > **代价函数**(Cost Function): 计算整个训练集**所有损失函数之和的平均值**
  105. >
  106. >
  107. >
  108. > 综合考虑,本笔记对两者概念进行细分,若有所谬误,欢迎指正。
  109. >
  110. > [机器学习中的目标函数、损失函数、代价函数有什么区别?- 知乎](https://www.zhihu.com/question/52398145/answer/298003145)
  111. 我们的目的在于求解预测结果 $h$ 最接近于实际结果 $y$ 时 $\theta$ 的取值,则问题可表达为**求解 $\sum\limits_{i=0}^{m}(h_\theta(x^{(i)})-y^{(i)})$ 的最小值**。
  112. > $m$: 训练集中的样本总数
  113. >
  114. > $y$: 目标变量/输出变量
  115. >
  116. > $\left(x, y\right)$: 训练集中的实例
  117. >
  118. > $\left(x^{\left(i\right)},y^{\left(i\right)}\right)$: 训练集中的第 $i$ 个样本实例
  119. ![](images/20180105_224648.png)
  120. 上图展示了当 $\theta$ 取不同值时,$h_\theta\left(x\right)$ 对数据集的拟合情况,蓝色虚线部分代表**建模误差**(预测结果与实际结果之间的误差),我们的目标就是最小化所有误差之和。
  121. 为了求解最小值,引入代价函数(Cost Function)概念,用于度量建模误差。考虑到要计算最小值,应用二次函数对求和式建模,即应用统计学中的平方损失函数(最小二乘法):
  122. $$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$$
  123. > $\hat{y}$: $y$ 的预测值
  124. >
  125. > 系数 $\frac{1}{2}$ 存在与否都不会影响结果,这里是为了在应用梯度下降时便于求解,平方的导数会抵消掉 $\frac{1}{2}$ 。
  126. 讨论到这里,我们的问题就转化成了**求解 $J\left( \theta_0, \theta_1 \right)$ 的最小值**。
  127. ## 2.3 代价函数 - 直观理解1(Cost Function - Intuition I)
  128. 根据上节视频,列出如下定义:
  129. - 假设函数(Hypothesis): $h_\theta(x)=\theta_0+\theta_1x$
  130. - 参数(Parameters): $\theta_0, \theta_1$
  131. - 代价函数(Cost Function): $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}}}$
  132. - 目标(Goal): $\underset{\theta_0, \theta_1}{\text{minimize}} J \left(\theta_0, \theta_1 \right)$
  133. 为了直观理解代价函数到底是在做什么,先假设 $\theta_1 = 0$,并假设训练集有三个数据,分别为$\left(1, 1\right), \left(2, 2\right), \left(3, 3\right)$,这样在平面坐标系中绘制出 $h_\theta\left(x\right)$ ,并分析 $J\left(\theta_0, \theta_1\right)$ 的变化。
  134. ![](images/20180106_085915.png)
  135. 右图 $J\left(\theta_0, \theta_1\right)$ 随着 $\theta_1$ 的变化而变化,可见**当 $\theta_1 = 1$ 时,$J\left(\theta_0, \theta_1 \right) = 0$,取得最小值,**对应于左图青色直线,即函数 $h$ 拟合程度最好的情况。
  136. ## 2.4 代价函数 - 直观理解2(Cost Function - Intuition II)
  137. > 注:该部分由于涉及到了多变量成像,可能较难理解,要求只需要理解上节内容即可,该节如果不能较好理解可跳过。
  138. 给定数据集:
  139. ![](images/20180106_091307.png)
  140. 参数在 $\theta_0$ 不恒为 $0$ 时代价函数 $J\left(\theta\right)$ 关于 $\theta_0, \theta_1$ 的3-D图像,图像中的高度为代价函数的值。
  141. ![](images/20180106_090904.png)
  142. 由于3-D图形不便于标注,所以将3-D图形转换为**轮廓图(contour plot)**,下面用轮廓图(下图中的右图)来作直观理解,其中相同颜色的一个圈代表着同一高度(同一 $J\left(\theta\right)$ 值)。
  143. $\theta_0 = 360, \theta_1 =0$ 时:
  144. ![](images/0f38a99c8ceb8aa5b90a5f12136fdf43.png)
  145. 大概在 $\theta_0 = 0.12, \theta_1 =250$ 时:
  146. ![](images/20180106_092119.png)
  147. 上图中最中心的点(红点),近乎为图像中的最低点,也即代价函数的最小值,此时对应 $h_\theta\left(x\right)$ 对数据的拟合情况如左图所示,嗯,一看就拟合的很不错,预测应该比较精准啦。
  148. ## 2.5 梯度下降(Gradient Descent)
  149. 在特征量很大的情况下,即便是借用计算机来生成图像,人工的方法也很难读出 $J\left(\theta\right)$ 的最小值,并且大多数情况无法进行可视化,故引入**梯度下降(Gradient Descent)方法,让计算机自动找出最小化代价函数时对应的 $\theta$ 值。**
  150. 梯度下降背后的思想是:开始时,我们随机选择一个参数组合$\left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}} \right)$即起始点,计算代价函数,然后寻找下一个能使得代价函数下降最多的参数组合。不断迭代,直到找到一个**局部最小值(local minimum)**,由于下降的情况只考虑当前参数组合周围的情况,所以无法确定当前的局部最小值是否就是**全局最小值(global minimum)**,不同的初始参数组合,可能会产生不同的局部最小值。
  151. 下图根据不同的起始点,产生了两个不同的局部最小值。
  152. ![](images/db48c81304317847870d486ba5bb2015.jpg)
  153. 视频中举了下山的例子,即我们在山顶上的某个位置,为了下山,就不断地看一下周围**下一步往哪走**下山比较快,然后就**迈出那一步**,一直重复,直到我们到达山下的某一处**陆地**。
  154. 梯度下降公式:
  155. $$
  156. \begin{align*}
  157. & \text{Repeat until convergence:} \; \lbrace \\
  158. &{{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( {\theta_{0}},{\theta_{1}} \right) \\
  159. \rbrace
  160. \end{align*}
  161. $$
  162. > ${\theta }_{j}$: 第 $j$ 个特征参数
  163. >
  164. > ”:=“: 赋值操作符
  165. >
  166. > $\alpha$: 学习速率(learning rate), $\alpha > 0$
  167. >
  168. > $\frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$: $J\left( \theta_0, \theta_1 \right)$ 的偏导
  169. 公式中,学习速率决定了参数值变化的速率即”**走多少距离**“,而偏导这部分决定了下降的方向即”**下一步往哪里**“走(当然实际上的走多少距离是由偏导值给出的,学习速率起到调整后决定的作用),收敛处的局部最小值又叫做极小值,即”**陆地**“。
  170. ![](images/20180106_101659.png)
  171. 注意,在计算时要**批量更新 $\theta$ 值**,即如上图中的左图所示,否则结果上会有所出入,原因不做细究。
  172. ## 2.6 梯度下降直观理解(Gradient Descent Intuition)
  173. 该节探讨 $\theta_1$ 的梯度下降更新过程,即 $\theta_1 := \theta_1 - \alpha\frac{d}{d\theta_1}J\left(\theta_1\right)$,此处为了数学定义上的精确性,用的是 $\frac{d}{d\theta_1}J\left(\theta_1\right)$,如果不熟悉微积分学,就把它视作之前的 $\frac{\partial}{\partial\theta}$ 即可。
  174. ![](images/20180106_184926.png)
  175. 把红点定为初始点,切于初始点的红色直线的斜率,表示了函数 $J\left(\theta\right)$ 在初始点处有**正斜率**,也就是说它有**正导数**,则根据梯度下降公式 ,${{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( \theta_0, \theta_1 \right)$ 右边的结果是一个正值,即 $\theta_1$ 会**向左边移动**。这样不断重复,直到收敛(达到局部最小值,即斜率为0)。
  176. 初始 $\theta$ 值(初始点)是任意的,若初始点恰好就在极小值点处,梯度下降算法将什么也不做($\theta_1 := \theta_1 - \alpha*0$)。
  177. > 不熟悉斜率的话,就当斜率的值等于图中三角形的高度除以水平长度好啦,精确地求斜率的方法是求导。
  178. 对于学习速率 $\alpha$,需要选取一个合适的值才能使得梯度下降算法运行良好。
  179. - 学习速率过小图示:
  180. ![](images/20180106_190944.png)
  181. 收敛的太慢,需要更多次的迭代。
  182. - 学习速率过大图示:
  183. ![](images/20180106_191023.png)
  184. 可能越过最低点,甚至导致无法收敛。
  185. **学习速率只需选定即可**,不需要在运行梯度下降算法的时候进行动态改变,随着斜率越来越接近于0,代价函数的变化幅度会越来越小,直到收敛到局部极小值。
  186. 如图,品红色点为初始点,代价函数随着迭代的进行,变化的幅度越来越小。
  187. ![](images/20180106_191956.png)
  188. **最后,梯度下降不止可以用于线性回归中的代价函数,还通用于最小化其他的代价函数。**
  189. ## 2.7 线性回归中的梯度下降(Gradient Descent For Linear Regression)
  190. 线性回归模型
  191. - $h_\theta(x)=\theta_0+\theta_1x$
  192. - $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}}}$
  193. 梯度下降算法
  194. $$
  195. \begin{align*}
  196. & \text{Repeat until convergence:} \; \lbrace \\
  197. &{{\theta }_{j}}:={{\theta }_{j}}-\alpha \frac{\partial }{\partial {{\theta }_{j}}}J\left( {\theta_{0}},{\theta_{1}} \right) \\
  198. \rbrace
  199. \end{align*}
  200. $$
  201. 直接将线性回归模型公式代入梯度下降公式可得出公式
  202. ![](images/20180106_203726.png)
  203. 当 $j = 0, j = 1$ 时,**线性回归中代价函数求导的推导过程:**
  204. $$
  205. \begin{align*}
  206. \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)\\
  207. &=\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)}}\\
  208. &=\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)}}
  209. \end{align*}
  210. $$
  211. 所以当 $j = 0$ 时:
  212. $$
  213. \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)}
  214. $$
  215. 所以当 $j = 1$ 时:
  216. $$
  217. \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)}
  218. $$
  219. 上文中所提到的梯度下降,都为批量梯度下降(Batch Gradient Descent),即每次计算都使用**所有**的数据集 $\left(\sum\limits_{i=1}^{m}\right)$ 更新。
  220. 由于线性回归函数呈现**碗状**,且**只有一个**全局的最优值,所以函数**一定总会**收敛到全局最小值(学习速率不可过大)。同时,函数 $J$ 被称为**凸二次函数**,而线性回归函数求解最小值问题属于**凸函数优化问题**。
  221. ![](images/24e9420f16fdd758ccb7097788f879e7.png)
  222. 另外,使用循环求解,代码较为冗余,后面会讲到如何使用**向量化(Vectorization)**来简化代码并优化计算,使梯度下降运行的更快更好。
  223. # 3 Linear Algebra Review
  224. 这部分,学过线性代数的可以复习一下,比较基础。笔记整理暂留。
  225. ## 3.1 Matrices and Vectors
  226. Octave/Matlab 代码:
  227. ```matlab
  228. % The ; denotes we are going back to a new row.
  229. A = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]
  230. % Initialize a vector
  231. v = [1;2;3]
  232. % Get the dimension of the matrix A where m = rows and n = columns
  233. [m,n] = size(A)
  234. % You could also store it this way
  235. dim_A = size(A)
  236. % Get the dimension of the vector v
  237. dim_v = size(v)
  238. % Now let's index into the 2nd row 3rd column of matrix A
  239. A_23 = A(2,3)
  240. ```
  241. 执行结果:
  242. ```
  243. A =
  244. 1 2 3
  245. 4 5 6
  246. 7 8 9
  247. 10 11 12
  248. v =
  249. 1
  250. 2
  251. 3
  252. m = 4
  253. n = 3
  254. dim_A =
  255. 4 3
  256. dim_v =
  257. 3 1
  258. A_23 = 6
  259. ```
  260. ## 3.2 Addition and Scalar Multiplication
  261. Octave/Matlab 代码:
  262. ```matlab
  263. % Initialize matrix A and B
  264. A = [1, 2, 4; 5, 3, 2]
  265. B = [1, 3, 4; 1, 1, 1]
  266. % Initialize constant s
  267. s = 2
  268. % See how element-wise addition works
  269. add_AB = A + B
  270. % See how element-wise subtraction works
  271. sub_AB = A - B
  272. % See how scalar multiplication works
  273. mult_As = A * s
  274. % Divide A by s
  275. div_As = A / s
  276. % What happens if we have a Matrix + scalar?
  277. add_As = A + s
  278. ```
  279. 执行结果:
  280. ```
  281. A =
  282. 1 2 4
  283. 5 3 2
  284. B =
  285. 1 3 4
  286. 1 1 1
  287. s = 2
  288. add_AB =
  289. 2 5 8
  290. 6 4 3
  291. sub_AB =
  292. 0 -1 0
  293. 4 2 1
  294. mult_As =
  295. 2 4 8
  296. 10 6 4
  297. div_As =
  298. 0.50000 1.00000 2.00000
  299. 2.50000 1.50000 1.00000
  300. add_As =
  301. 3 4 6
  302. 7 5 4
  303. ```
  304. ## 3.3 Matrix Vector Multiplication
  305. Octave/Matlab 代码:
  306. ```matlab
  307. % Initialize matrix A
  308. A = [1, 2, 3; 4, 5, 6;7, 8, 9]
  309. % Initialize vector v
  310. v = [1; 1; 1]
  311. % Multiply A * v
  312. Av = A * v
  313. ```
  314. 执行结果:
  315. ```
  316. A =
  317. 1 2 3
  318. 4 5 6
  319. 7 8 9
  320. v =
  321. 1
  322. 1
  323. 1
  324. Av =
  325. 6
  326. 15
  327. 24
  328. ```
  329. ## 3.4 Matrix Matrix Multiplication
  330. Octave/Matlab 代码:
  331. ```matlab
  332. % Initialize a 3 by 2 matrix
  333. A = [1, 2; 3, 4;5, 6]
  334. % Initialize a 2 by 1 matrix
  335. B = [1; 2]
  336. % We expect a resulting matrix of (3 by 2)*(2 by 1) = (3 by 1)
  337. mult_AB = A*B
  338. % Make sure you understand why we got that result
  339. ```
  340. 执行结果:
  341. ```
  342. A =
  343. 1 2
  344. 3 4
  345. 5 6
  346. B =
  347. 1
  348. 2
  349. mult_AB =
  350. 5
  351. 11
  352. 17
  353. ```
  354. ## 3.5 Matrix Multiplication Properties
  355. Octave/Matlab 代码:
  356. ```matlab
  357. % Initialize random matrices A and B
  358. A = [1,2;4,5]
  359. B = [1,1;0,2]
  360. % Initialize a 2 by 2 identity matrix
  361. I = eye(2)
  362. % The above notation is the same as I = [1,0;0,1]
  363. % What happens when we multiply I*A ?
  364. IA = I*A
  365. % How about A*I ?
  366. AI = A*I
  367. % Compute A*B
  368. AB = A*B
  369. % Is it equal to B*A?
  370. BA = B*A
  371. % Note that IA = AI but AB != BA
  372. ```
  373. 执行结果:
  374. ```
  375. A =
  376. 1 2
  377. 4 5
  378. B =
  379. 1 1
  380. 0 2
  381. I =
  382. Diagonal Matrix
  383. 1 0
  384. 0 1
  385. IA =
  386. 1 2
  387. 4 5
  388. AI =
  389. 1 2
  390. 4 5
  391. AB =
  392. 1 5
  393. 4 14
  394. BA =
  395. 5 7
  396. 8 10
  397. ```
  398. ## 3.6 Inverse and Transpose
  399. Octave/Matlab 代码:
  400. ```matlab
  401. % Initialize matrix A
  402. A = [1,2,0;0,5,6;7,0,9]
  403. % Transpose A
  404. A_trans = A'
  405. % Take the inverse of A
  406. A_inv = inv(A)
  407. % What is A^(-1)*A?
  408. A_invA = inv(A)*A
  409. ```
  410. 执行结果:
  411. ```
  412. A =
  413. 1 2 0
  414. 0 5 6
  415. 7 0 9
  416. A_trans =
  417. 1 0 7
  418. 2 5 0
  419. 0 6 9
  420. A_inv =
  421. 0.348837 -0.139535 0.093023
  422. 0.325581 0.069767 -0.046512
  423. -0.271318 0.108527 0.038760
  424. A_invA =
  425. 1.00000 -0.00000 0.00000
  426. 0.00000 1.00000 -0.00000
  427. -0.00000 0.00000 1.00000
  428. ```

机器学习