zoukankan      html  css  js  c++  java
  • 机器学习-矩阵空间的变换

    机器学习-矩阵空间的变换

    由特征列的取值范围所有构成的矩阵空间应具有完整性,即能够反映事物的空间形式或变化规律。

    向量

    无论在几何还是在物理上,向量都是一个有方向、有大小的量,而向量的点坐标不过表征了该向量与坐标系原点的距离,以及与坐标系的夹角而已。

    向量不是一个点,而是一个有向的线段,线段的长度是向量的大小,线段的指向是向量的方向。

    向量张成空间

    n维直角坐标系的每个坐标轴都是向量,长度可以无限延伸,它们两两之间在方向上相互正交,定位其上的点需要考虑它与原点和每个坐标轴的关系,因此是一个n维向量。

    向量的长度和方向都是相对于其它向量的量,长度相对于原点,方向相对于坐标轴。要想构成一个二维的空间,就必须有两个或两个以上存在交点(原点)的向量(或其延长线)。

    从线性代数的角度说,构成空间的两个向量之间必须线性无关,也就是说这两个向量的维度必须与他们构成的矩阵的秩相等,而这两个向量就称为这个空间的基或基底。

    基底向量对应坐标系的坐标轴,有几个基底向量就有几个坐标轴,n维空间的一个基底就需要有n个基底向量。

    由基底构成的空间内部的任何向量都可以由其基底来线性表示。

    向量的空间变换

    向量与矩阵的乘法:一个向量从一个线性空间(坐标系),通过选取一个新的基底(一个新的n维坐标系),变换到这个新基地构成的另一个线性空间的过程。

    一个向量的线性变换在几何上表现为缩放和旋转两个动作,以及这两个动作的组合--拉伸、压缩等。这些动作的一个共性是都要通过原点。

    向量组与矩阵的变换-理解矩阵的乘法

    矩阵乘法的意义:把一组向量变换到另一个空间中。

    变换时,左边是一组在原有空间中的向量组,而且数量可以是不定的,因此,矩阵乘法对称号左边矩阵的行数不限制,但是列数要等于称号右边矩阵的行数,这样的变换才有定义。

    左边的矩阵被定义为一个向量组,其列数被认为向量的维度;右边的矩阵被定义为一个线性空间,相乘运算就是将这个向量组线性变换到新的线性空间中。右边矩阵的行数最少要满足是由基底向量构成的线性空间的维度,或方程组的秩。

    矩阵乘法公式从左右两边看都是矩阵,但是其意义完全不同,所以不满足交换律

    线性变换-特征值与特征向量

    向量组变换到另一个线性空间中时,线性变换的规则要求这个变换必须通过由基底向量构成的坐标系的原点,简单来说,以平面直角坐标系为例,这种变换不过就是沿着通过原点的某条直线的缩放和旋转。

    这种变换必然导致有这样一组向量存在,即被变换的线性空间内的某个向量或量组只发生了伸缩变换,而没有发生旋转的效果,也就是说在线性变换下,在它们所在的直线上保持不变。这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值。

    如果特征值变为负值,即特征向量旋转180°,也可看作方向不变,而伸缩比为负值。所以特征向量也叫线性不变量。特征向量的不变性使它们变成与自身共线的向量。

    特征向量在线性变换后可能伸长或缩短,或反向伸长或反向缩短,甚至变成零向量(特征值为零时),但与它变换后的向量应在同一条直线上。

    原矩阵=特征向量 * 特征值构成的对角矩阵 * 特征向量的逆

    求特征值及特征向量的代码

    from numpy import *
    
    # 特征值 特征向量计算
    
    A = [[8, 1, 6], [3, 5, 7], [4, 9, 2]]
    # linalg.eig计算矩阵特征两箱
    evals,evecs = linalg.eig(A)
    
    print("特征值:", evals)
    print("特征向量:", evecs)
    
    # 手工求特征值
    # 得知系数方程矩阵
    equationA = [1, -15, -24, 360]
    # roots计算矩阵方程的根
    evals = roots(equationA)
    print("特征值new:", evals)
    
    #根据特征值和特征矩阵还原原矩阵(m行n列)
    m,n = shape(A)
    print("m:", m)
    # eye生成对角矩阵
    sigma = evals * eye(m)
    # linalg.inv矩阵求逆
    mat = evecs * sigma * linalg.inv(evecs)
    print("还原矩阵:", mat)
  • 相关阅读:
    Java基础其他
    java网络编程
    java多线程编程
    正则表达式--位置匹配和组
    设计模式
    深入 Java Web
    mysql 好用的sql语句
    spring boot 发送邮件
    dubbo的spi机制
    原理分析dubbo分布式应用中使用zipkin做链路追踪
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/12369046.html
Copyright © 2011-2022 走看看