机器学习线性代数基础: 坐标与变换

目录

[TOC]


概述

整体框架

graph TB
    1((空间变换))---11(维度)
    11-->坐标与变换
    11-->空间与映射
    11-->近似与拟合
    11-->相似与特征
    11-->降维与压缩
    
    1---12(数据处理)
    12-->用空间表示数据
    12-->用空间处理数据
    12-->用空间优化数据

要点

从线性代数的几何意义理解重要概念.

Python库:numpy

import numpy as np

坐标与变换: 高楼平地起

描述空间的工具: 向量

graph LR
    0{几何空间}
    0--坐标点---1
    0--有向线段---1
    1((向量))
    1-->11(类型)
    11--纵向排列-->列向量
    11--横向排列-->行向量
    1-->12(属性)
    12--元素平方和的开平方根-->模长
    1---13(运算)
    13-->加减法
    13-->数乘
    13-->内积和外积
    

向量的概念

  1. 定义: 把一组数字排列成一行或一列

  2. 分类:

    1. 列向量(默认): 纵向排列
    2. 行向量: 横向排列
  3. 属性

    1. 模长:[图片上传失败...(image-18a456-1635079870526)]

      空间向量(x,y,z),其中x,y,z分别是三轴上的坐标,模长是 [3] :

      [图片上传失败...(image-f563af-1635079870527)]

      平面向量(x,y),模长是:

      [图片上传失败...(image-8bb46b-1635079870527)]

      对于向量

      [图片上传失败...(image-210214-1635079870527)]

      属于n维复向量空间

      [图片上传失败...(image-a0a886-1635079870527)]

      =(x1,x2,…,xn)

      [图片上传失败...(image-cc9954-1635079870527)]

      的模为

      [图片上传失败...(image-db488d-1635079870527)]

      =

      [图片上传失败...(image-253a6-1635079870527)]

      a=np.array((1,2,3,4))
      np.sqrt(np.square(a).sum())
      #5.477225575051661
      
  4. 用途:

    1. 描述几何空间中的坐标点。几何空间维度有向量的成分个数决定.
    2. 描述几何空间从原点到该向量坐标点的有向线段
      1. 值的正负性代表与坐标轴的方向是一致还是相反;
      2. 向量相加表示多个向量首尾相连,两端的起止点相连的有向线段;
      3. 向量的数乘表示向量在某方向上进行相应的倍数改变。
    3. 描述事物的属性和特征, 并对应到高维空间中进行定量表达.
  5. python实现:

    1. np.array()+np.newaxis

      import numpy as np
      
      '''行向量'''
      a=np.array([1,2,3,4])
      print(a)
      
      #[1 2 3 4]
      
      '''列向量'''
      A=np.array([1,2,3,4])
      A_t=A[:,np.newaxis]
      print(A_t,'\n',A_t.shape)
      
      '''
      [[1]
       [2]
       [3]
       [4]] 
       (4, 1)
       '''
      
  1. np.array()+.T

    a=np.array([[1,2,3,4]])
    a.shape
    #(1, 4)
    a.T
    '''
    array([[1],
           [2],
           [3],
           [4]])'''
    a.T.shape
    #(4, 1)
    

向量的运算

向量的加/减法+-

两个维度相同的向量,将相同位置上的元素相加——》维度不变

img
img
A=np.array([1,2,3,4])
A_t=A[:,np.newaxis]
a=np.array([[1,2,3,4]])
print(A_t+a.T)
print(A_t-a.T)
'''
[[2]
 [4]
 [6]
 [8]]'''
'''
[[0]
 [0]
 [0]
 [0]]'''
向量的数量乘积*

标量同向量的每个元素分别相乘——》维度不变

img
print(3*a.T)
'''
[[ 3]
 [ 6]
 [ 9]
 [12]]'''
向量间的乘法:内积和外机
内积:np.dot() #传入一维数组(行向量)

同维数向量,将对应位置上的元素相乘,然后合并相加——》标量

内积的另一种表示方式: u\cdot v=|u||v|\cos(\theta)

向量u在向量v上的投影长度乘向量v的模长

img
a=b=np.array((1,2,3,4))
a.dot(b)
#30
外积: np.cross()
img
img

类似求解矩阵的特征值

另一种表示方式: u\times v=|u||v|\sin(\theta)

在二维平面中,表示两个向量张成的平行四边形的''面积'', 三维中表示两个向量张成的法向量

img
a=np.array((1,2,3))
b=np.array((3,4,5))
np.cross(a,b) #只支持2-3维向量
#array([-2,  4, -2]) 相同向量的外积为0向量
先数乘后叠加: 向量的线性组合
img
a=np.array((1,2,3))
b=np.array((3,4,5))
c=np.array((2,4,7))
3*a+6*b+2*c
#array([25, 38, 53])

相关概念: 共线, 共面

基底构建一切, 基底决定坐标

graph LR
    基向量--成员-->基底
    基向量--"系数(投影值)"-->坐标
    基向量--正方向且长度为1-->1["ex/ey"]
    1--内积-->坐标
    基底-->张成空间

向量的坐标

  1. 描述几何空间中的坐标点。几何空间维度有向量的成分个数决定.
  2. 描述几何空间从原点到该向量坐标点的有向线段
    1. 值的正负性代表与坐标轴的方向是一致还是相反;
    2. 向量相加表示多个向量首尾相连,两端的起止点相连的有向线段;
    3. 向量的数乘表示向量在某方向上进行相应的倍数改变。

向量的坐标依赖于选取的基底

  • 基底:被选作向量u基准的一组向量(ex,ey)

  • 基向量:基底的每一个成员向量, 一般选取沿着坐标轴正方向并且长度为1的向量

    任何一个向量找到同方向上模长为1的向量方法:: 向量的各成分分别除以向量的模长

  • 坐标:对应的各个基向量前的系数

向量在不同基底上表示不同坐标

步骤
  1. 根据新基底, 求同方向模长为1的向量
  2. 原坐标分别与模长为1的新基底内积--->新基底的坐标
img
构成基底的条件

在n维空间中, 任意一个向量都可以表示为一组基向量的线性组合.

  1. 向量数量足够: 基向量的维数与个数==向量的成员数
  2. 满足线性无关: 其中任何一个向量都不能通过其余向量的线性组合的形式进行表示

张成空间

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

针对特定组向量而言, 这些向量可以是线性相关的

矩阵: 让向量动起来

graph LR
    0{矩阵}--->1((类型))
    1--行列数相等-->方阵
    1--行列位置互换-->转置矩阵
    转置矩阵--前后相同-->对称矩阵
    1--元素全为0-->零矩阵
    1--对角线上非0,其余全为0-->对角矩阵
    对角矩阵--对角线上全为1-->单位矩阵
    1--一维矩阵-->向量
    
    0-->2((运算))
    2--对应元素相加-->加法
    2--与所有元素相乘-->数乘
    2--左行右列-->矩阵与矩阵相乘

矩阵: 排列的向量, 堆放的数字: np.array()/ np.matrix()

  • 一个m\times n的数字方阵
  • n个m维列向量从左到右并排摆放
  • m个n维行向量从上到下进行叠放

数学符号: A, A_{ij}

np.matrix('1;2;3')
'''
matrix([[1],
        [2],
        [3]])'''
np.matrix('3,4,5;1,2,5')
'''
matrix([[3, 4, 5],
        [1, 2, 5]])'''
np.array(((3,4,5),(1,2,5)))
'''
array([[3, 4, 5],
       [1, 2, 5]])'''

矩阵的类型

方阵

行列数相等的矩阵: A=\begin{bmatrix}0&1&2\\3&4&5\\6&7&8\\\end{bmatrix}

转置矩阵: A^T: A.T属性

行和列上的元素进行位置互换

np.matrix('3,4,5;1,2,5')
'''
matrix([[3, 4, 5],
        [1, 2, 5]])'''
np.matrix('3,4,5;1,2,5').T
'''
matrix([[3, 1],
        [4, 2],
        [5, 5]])'''
对称矩阵: A=A^T

原矩阵与其转置矩阵相等

零矩阵: O; np.zeros()

所有元素都是0的矩阵

np.zeros((5,3))
'''
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])'''
对角矩阵: np.diag()

非对角位置上的矩阵元素全部为0

np.diag((4,3,2,5))
'''
array([[4, 0, 0, 0],
       [0, 3, 0, 0],
       [0, 0, 2, 0],
       [0, 0, 0, 5]])'''
单位矩阵: I_n: np.eye()

对角位置上元素均为1, 其余位置元素均为0的特殊对角矩阵

np.eye(5)
'''
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])'''
向量: 可以视作一维矩阵

矩阵的运算

加法: +

两矩阵对应位置上元素分别进行相加, 两个矩阵的规模必须相等.

img
np.eye(5)+np.ones((5,5))
'''
array([[2., 1., 1., 1., 1.],
       [1., 2., 1., 1., 1.],
       [1., 1., 2., 1., 1.],
       [1., 1., 1., 2., 1.],
       [1., 1., 1., 1., 2.]])'''
矩阵的数量乘法: *

标量数字分别矩阵的每一个元素相乘

img
5*np.ones((5,5))
'''
array([[5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.]])'''
矩阵与矩阵的乘法: np.dot()

左边矩阵的每一行分别与右边矩阵的所有列依次内积

  1. 左边矩阵的列数和右边矩阵的列数相等
  2. 左边矩阵的行数决定了最终结果矩阵的行数
  3. 右边矩阵的列数决定最终结果矩阵的列数
img
a=5*np.ones((5,5))
a.dot(np.eye(5))
'''
array([[5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.]])'''
矩阵乘以向量: 改变向量的空间位置

把列向量看成是一个列数为1的特殊矩阵

在指定矩阵的乘法作用下, 原始空间的向量被映射转换到了目标空间中的新坐标, 向量的空间位置由此发生变化, 甚至空间的维数可能会改变.

img

矩阵乘向量的新视角: 变换基底

本质上可看作是对向量基底的一种改变

行的角度: 多次运用向量点乘的定义式

img

列的角度: 重新组合矩阵的列向量

对位于原矩阵各列的列向量重新进行线性组合的过程, 而在线性组合的运算过程中, 结果中的各个系数就是参与乘法运算的列向量中所对应的各个成分.

img
img

再引申: 向量的基底的变化

旧的基底被映射到新的基底, 在基底缩放倍数(系数x,y)不变下, 描述基底改变之后的空间位置.

img

\begin{bmatrix}x\\y\\\end{bmatrix}=x\begin{bmatrix}1\\0\\\end{bmatrix}+y\begin{bmatrix}0\\1\\\end{bmatrix}
img

img

运算矩阵的各列就是映射后的新基底

二阶方阵

如果以向量(\begin{bmatrix}a\\c\\\end{bmatrix},\begin{bmatrix}b\\d\\\end{bmatrix})为基底, 那么其坐标仍是(x, y);

如果以默认的向量(\begin{bmatrix}1\\0\\\end{bmatrix},\begin{bmatrix}0\\1\\\end{bmatrix})为基底, 那么其坐标就是(ax+by, cx+dy)

扩展: 三阶方阵的情况(同二阶)
img
更一般地: m\times n矩阵乘以n维列向量
img

关于基变换: 一些意外的情况

  1. 当n>m时, 显然这n个向量线性相关, 因此不构成基底.
  2. 当n<m时, 即使这n个向量线性无关, 由于它们不能表示m维空间中的所有向量, 因此也不能称为m维目标空间的基底
  3. 当且仅当n=m, 且zhen个向量线性无关时, 它们才能称为目标空间的一组新的基底.
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容