《机器学习线性代数基础》Python描述——第一章笔记

向量的概念:直观的来说就是把一组数字排成一行或一列,就称为向量。

向量是对空间进行描述的有力工具。

任何一个向量都可以理解为从坐标原点开始到空间上某一点的一条有向线段,向量中成分的个数就是向量的维数。

向量的功能不仅局限于用来直接描述空间中的点坐标和有向线段,也可以凭借基础的数据表示功能,成为一种描述事物属性的便捷工具。
例如:score = [85 92 89]

向量很适合将对象的属性和特征对应到高维空间中进行定量表达,同时在此基础上进行进一步的后续处理,如判断词汇之间的相似性(NLP过程中的应用)等。还有一些数据处理的方法,如:投影、降维等都是在向量描述的基础上实现的。

在实际使用向量工具进行描述和计算时,没有特殊说明,一般默认为列向量。(为了方便后续的向量坐标变换、空间之间的映射等计算过程的处理)

用Python语言表示向量的常用工具库:numpy

在Python中一般使用numpy语言库来生成一个向量,但默认生成的是行向量,要转变成我们常用的列向量还需要做一些处理工作。
注:利用转置的方法,把向量的行索引和列索引交换位置,对其他向量有效,但对于一维向量无效。
例如:

a = np.array([1,2,3,4])
print(a)
print(a.transpose())

结果:
在这里插入图片描述

记住!一个中括号约束一个elements,从里到外率先约束的是“列”

书上原话:一个二维数组和一个大小合适的一维数组的矩阵点积运算之后会得到一个一维数组。这里的大小合适,假定二维数组是N×M矩阵,那么一维数组应该是1×M,点积后输出的结果应该是1×M*M×N =1×N结果。
常用的简单生成列向量的方法:

把列向量和行向量分别看作N1和1M的矩阵,然后转置
例如:

B = np.array([[1,2,3,4]])
print(B)
print(B.T)

结果:
在这里插入图片描述

向量的加法:

例如:

u = np.array([[1,2,3,4]]).T
v = np.array([[5,6,7,8]]).T
w = u+v
print(w)

结果:
在这里插入图片描述

向量的数量乘法、内积和外积:

向量的数乘略简单,A*3即可,这边就不举例子了

两个n维向量u和v的内积运算规则为:U1V1+U2V2+…+Un*Vn

它的另一种表示方法为:uv = |u||v|cost 意为向量u在向量v上的投影长度乘向量的模长,如果v是单位向量,内积就可以直接描述为向量u在向量v方向上的投影长度。

注:如果直接使用工具库numpy中的内积运算函数dot进行运算操作,那么传入的参数则必须是用一维数组表示的行向量。(即传入二维数组是不行的)

实际操作:

u = np.array([[3, 5, 2]])
v = np.array([[1, 4, 7]]).T
w = np.dot(u, v)
print(w)

结果:
在这里插入图片描述
在二维平面中,向量u和向量v的外积运算法则为:uv = [u1 u2]*[v1 v2] = u1v2-u2v1,同样也有另外一种表达式:uv = |u||v|sint,它的物理意义:表示两个向量张成的平行四边形的“面积”,当两向量夹脚小于180度则为正的,夹脚大于180度则为负的。

代码如下:

u = np.array([[3, 5]])
v = np.array([[1, 4]])
w = np.cross(u, v)
print(w)

结果:
在这里插入图片描述
而在三维空间中,外积的运算则更为复杂,其计算所得到的结果是一个向量而不是一个数值,三维向量u和v的外积运算法则为:uv = [u1 u2 u3]*[v1 v2 v3] = [u2v3-u3v2 u3v1-u1v3 u1v2-u2v1],这个的物理意义是:表示u和v两个向量张成平面的法向量

注:当讨论线性组合的多种不同情况时,要考虑到共线、共面的概念,这些特殊性质会对一组向量线性组合得到的结果向量在空间中的位置产生重要影响,比如组合以后是整个三维空间,或是一个二维平面,或是一条直线等等。

想要准确的描述向量,首先要确定一组基底,然后通过求出向量在各个基向量上的投影值,最后才能确定在这个基上的坐标值。

对于任何一个向量,想要找到同方向上模长为1的向量并不是一件难事,只要让向量的各成分分别除以向量的模长即可。

在一个n维空间中,不是随便选取n个向量都能作为一组基底,构成基底的向量必须满足一定条件:在n维空间中,任意一个向量都可以表示为这一组基向量的线性组合,并且这种线性组合的表示方式(也就是系数)必须是唯一的。
具体来说,要满足:

  1. 向量数量足够:如果想要成为n维空间中的一组基底,首先其中的每一个基向量的维数都必须为n,否则无法表示。
  2. 满足线性无关:一组向量需要满足线性无关的条件,即其中任何一个向量都不能通过其余向量的线性组合的形式进行表示。(线性无关和表示方法唯一性也是等价的)

张成空间:

概念:对于一组向量,由它的所有线性组合所构成的空间就称为这一组向量的张成空间。

注:向量的个数和维数都不是其张成空间维数及形态的决定因素,具体的情况需要结合向量的线性无关性进行整体考量,这会涉及秩的相关概念。

转置的实质就是将矩阵的行和列上的元素进行位置互换。

转置的性质:

在这里插入图片描述

  1. 一个矩阵转置得到的新矩阵与本身相相等——>这个矩阵是对称矩阵(对称矩阵的形式特征是:1.矩阵是一个方阵 2.矩阵沿着主对角线划分的两侧元素完全一致)
  2. 一个矩阵的逆矩阵与本身相乘得到单位矩阵
  3. 矩阵的行列式不等于零,矩阵可逆,反之不可逆
  4. 满秩矩阵一定是可逆的
  5. 所有元素都等于0的矩阵才被称为零矩阵,记作O

零矩阵也可以用下角标来描述矩阵的规模,如5*3的零矩阵可以记作O5,3
代码如下:

D = np.zeros([5,3])
print(D)

结果:
在这里插入图片描述
对角矩阵:一种特殊的方阵,在它的非对角线位置上矩阵的元素全都为0,这种矩阵就称为对角矩阵,0元素的位置也可以不写。
代码展示:

A = np.diag([1,2,3,4,5])
print(A)

结果:
在这里插入图片描述
**单位矩阵:**单位矩阵并不是指所有元素都为1的矩阵,而是指对角位置上的元素均为1,其余位置均为0的特殊对角矩阵。
代码展示:

I = np.eye(5)
print(I)

结果:
在这里插入图片描述
矩阵的加法运算和数量乘法运算,这边就不多赘述,和开头部分的向量加法和数量乘法运算类似。
直接来看矩阵与矩阵的乘法运算,主要有以下3个注意点:

  1. 左边矩阵的列数和右边矩阵的行数必须相等
  2. 左边矩阵的行数决定了最终结果矩阵的行数
  3. 右边矩阵的列数决定了最终结果矩阵的列数
矩阵乘以向量:改变向量的空间位置

矩阵和向量的乘法,一般是矩阵在左边,向量在右边,这种写法便于描述向量的空间位置在矩阵的作用下进行变换的过程。

矩阵和向量的乘法的本质:可以看作是对向量基底的一种改变

矩阵A与向量x的乘法,从列的角度来审视矩阵与向量的乘法运算,相当于对矩阵A的各个列向量进行线性组合的过程,每个列向量的组合系数就是向量x的各个对应部分。

m*n矩阵乘以n维列向量,映射后的向量维数和原始向量维数的关系取决于矩阵维数m和n的关系:

  1. 如果m>n,那么映射后的目标向量维数就大于原始向量的维数
  2. 如果m<n,那么映射后的目标向量维数就小于原始向量的维数
  3. 如果m=n,那么映射后的目标向量维数就等于原始向量的维数

不过上述的结论也存在特殊情况:

  1. 当m>n时,显然n个向量线性相关,因此不构成基底
  2. 当m<n时,即使n个向量线性无关,由于他们不能表示m维空间中的所有向量,因此也不能称为m维目标空间向量的基底
  3. 当且仅当m=n时,且这n个向量线性无关时,它们才能称为目标空间中的一组新的基底
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值