矩阵 - 概述
- 方括号之间的矩形数组
- 2D数组
- 被命名为大写字母(A,B,X,Y)
- 矩阵的维数是[行x列]
- 从左上角开始
- 向左下方
- 到右下角
- R [r*c] 表示具有r行和c列的矩阵
- 矩阵元素
- A (i,j) = 第 i 行和第j列的条目
- A (i,j) = 第 i 行和第j列的条目
- 提供组织,索引和访问大量数据的方法
向量 - 概述
- 是n×1矩阵
- 通常用小写字母表示
- n行
- 1列
- 例如
- 是一个四维矢量
- 将其称为矢量 R4
- 矢量元素
- v i = 第 i 个 向量元素
- 向量可以是0-索引(C ++)或1-索引(MATLAB)
- 数学1索引是最常见的
- 但在机器学习0-索引是有用的
- 通常假定使用1-索引向量,但是要注意有些地方会显式地使用0-索引
矩阵操作
- 加法
- 一次添加一个元素
- 只能加相同尺寸的矩阵
- 创建一个加和的相同尺寸的新矩阵
- 标量乘法
- 标量=实数
- 将每个元素乘以标量
- 生成与原始矩阵相同大小的矩阵
- 标量除法
- 与将矩阵乘以1/4相同
- 每个元素除以标量
- 组合操作数
- 首先进行乘法
- 首先进行乘法
- 矩阵-向量乘法
- [3 x 2]矩阵* [2 x 1]向量
- 新矩阵是[3×1]
- 如果[axb] * [bxc]
- 那么新的矩阵是[axc]
- 如果[axb] * [bxc]
- 你怎么做呢?
- 取两个向量数,并将其与矩阵的第一行相乘
- 然后将结果相加 - 这个数字是新向量中的第一个数字
- 将向量乘以第二行,并将结果相加
- 然后将最后一行乘以vector并将它们加在一起
- 取两个向量数,并将其与矩阵的第一行相乘
- 新矩阵是[3×1]
- [3 x 2]矩阵* [2 x 1]向量
- 详细说明
- A * x = y
- A是mxn矩阵
- x是nx 1矩阵
- n必须在向量和矩阵之间匹配
- 即内部尺寸必须匹配
- 结果是一个m维向量
- 要获得y i ,将A的第 i行与向量x的所有元素相乘 ,并将它们相加
- A * x = y
- 整洁的技巧
- 假设我们有一个包含四个值的数据集
- 我们假设 ħ θ(X) = - 40 + 0.25X
- 创建一个可以乘以一个向量的矩阵的数据
- 将参数放在您的矩阵可以乘的向量中
- 意味着我们能做到
- 预测=数据矩阵*参数
- 在这里,我们添加一个额外的列用来全部填充数据1
- 这意味着我们的θ0值可以计算和表达
- 预测=数据矩阵*参数
- 上图显示了如何工作
- 这可以比许多for循环更有效地计算
- 这也是更容易和更清晰的代码(假设您有适当的库来执行矩阵乘法)
- 矩阵-矩阵乘法
- 大概的概念
- 每次取出右边矩阵的
- 每次产生一个向量,将来自第二个矩阵的每个列向量乘以整个第一个矩阵
- 最终的产品是这些向量的组合(不添加或相加,只是字面上放在一起)
- 细节
- A x B = C
- A = [m*n]
- B = [n*o]
- C = [m*o]
- 使用矢量乘法o = 1
- 只有A中的列数匹配B中的行数时才能相乘
- A x B = C
- 机制
- 以B的第1列为向量
- 以该列乘以A生成一个[m*1]向量
- 对B中的每一列重复前两部
- B中有o列,所以我们在C中得到o列
- 概要
- 在矩阵C的第i列是由矩阵A乘以矩阵B的第i列获得的
- 从一个例子开始
- A x B
- 大概的概念
- 初始化
- 取矩阵A并乘以B的第一列向量
- 取矩阵A并乘以B的第二列向量
- [2 x 3]*[3 x 2]给你一个[2 x 2]的矩阵
实施/使用
- 依然是房价问题,但现在我们有三个假设函数和同一个数据集
- 为了将所有三个假设应用于所有数据,我们可以使用矩阵-矩阵乘法进行有效的处理
- 有
- 数据矩阵
- 参数矩阵
- 例
- 四个房子,我们想预测其价格
- 三个竞争假设
- 因为我们的假设是一个变量,为了使矩阵匹配,我们通过添加一个额外的列1将我们的数据(房屋大小)向量转换成4x2矩阵
- 有
- 这有什么意义
- 可以快速应用三个假设,做出12个预测
- 许多良好的线性代数库非常有效地做这种事情
矩阵乘法属性
- 可以包装很多单一操作
- 但是,请注意如何使用这些操作
- 一些有趣的属性
- 交换性
- 当使用原始数字/标量乘法是可交换的
- 3 * 5 == 5 * 3
- 矩阵不是这样
- A x B != B x A
- 矩阵乘法不可交换
- 当使用原始数字/标量乘法是可交换的
- 关联性
- 3×5×2 == 3×10 = 15×2
- 关联属性
- 矩阵乘法是关联的
- A x(B x C)==(A x B)x C
- 3×5×2 == 3×10 = 15×2
- 单位矩阵
- 1是任何标量的标识
- 即1 * z = z
- 任何实数
- 即1 * z = z
- 在矩阵中,我们有一个称为I的单位矩阵
- 有时叫 I{nxn}
- 1是任何标量的标识
- 看到上面的一些单位矩阵
- 不同的单位矩阵为每组维度
- 具有
- 沿着对角线1
- 0其他地方
- 1x1矩阵只是“1”
- 具有任何矩阵A乘以单位矩阵,结果仍为矩阵A的属性
- 所以如果A是[mxn]那么
- A *I
- I = nxn
- I* A
- I = mxm
- (使维度相匹配以满足乘法要求)
- I = mxm
- A *I
- 所以如果A是[mxn]那么
- 单位矩阵维度是隐含的
- 记住矩阵不是交换AB!= BA
- 除了B是单位矩阵
- AB == BA
- 除了B是单位矩阵
矩阵的逆和转置操作
- 矩阵逆
- “逆”的概念如何与实数相关?
- 1 =“单位元素”(如上所述)
- 每个数字都有一个倒数
- 这是你乘以数字来获取识别元素的数字
- 即如果你有x,x * 1 / x = 1
- 例如给出3号
- 3 * 3-1 = 1(单位数/矩阵)
- 在实数的空间里,并不是所有数都有倒数
- 例如0没有倒数
- 1 =“单位元素”(如上所述)
- 矩阵的倒数是多少?
- 如果A是mxm矩阵,则A inverse = A -1
- 所以A * A -1 = I
- 只有mxm的矩阵有逆
- 只有方阵有逆!
- 例
- 2×2矩阵
- 你是怎么找到倒数的
- 原来你有时可以手工做,虽然这很难
- 用于计算矩阵逆的数值软件
- 许多开源库
- 原来你有时可以手工做,虽然这很难
- 2×2矩阵
- 如果A全为零,则不存在逆矩阵
- 其他一些不是,不具有逆矩阵的矩阵是奇异矩阵或退化矩阵(即当它太接近0时)
- 因此,如果矩阵的行列式值为零,这可以被描述为达到奇异
- “逆”的概念如何与实数相关?
- 矩阵转置
- 有矩阵A(它是[nxm])如何改变它成为[mxn],同时保持相同的值
- 即交换行和列!
- 你怎么做
- 拿A的第一排成为的第一 列
- A的第二排 - 成为A T第二列…
- A是一个mxn矩阵
- B是A的转置
- 那么B是一个nxm矩阵
- A(i,j) = B(j,i)
- 有矩阵A(它是[nxm])如何改变它成为[mxn],同时保持相同的值