精华内容
下载资源
问答
  • 知识要点:矩阵的本质矩阵的计算公式实例演示背景矩阵计算是我们经常碰到的一个问题。在几乎所有跟“学问”二字稍微沾点边的东西里,矩阵这个家伙从不缺席。那Excel在其中扮演什么样的角色呢?矩阵是什么呢?矩阵...

    知识要点:

    • 矩阵的本质

    • 矩阵的计算公式

    • 实例演示

    背景

    矩阵计算是我们经常碰到的一个问题。在几乎所有跟“学问”二字稍微沾点边的东西里,矩阵这个家伙从不缺席。那Excel在其中扮演什么样的角色呢?

    矩阵是什么呢?

    矩阵就是把数字填到格子里。矩阵的发现来源于方程组的复杂性。

    19世纪的时候,随着物理学的大发展,数学家非常苦恼,因为非常麻烦但是必须求解的方程组越来越多啦。

    5a3c5c9abb2c9f6b0251c453051a696c.png

    求解上述方程组,比较麻烦。因为我们需要使用消元法对其进行处理,式子非常冗长。于是数学家提出Matrix概念。

    0cd5e258635da12bac80150355f9a1c2.png

    于是原来比较头疼的公式,似乎一下变得简单啦。其中的系数部分单独组成了一个,而参数部分表达为了一个部分。矩阵是一种操作。

    于是消元法就变成了矩阵的上下的加减。

    在现实生活中,矩阵的一个比较好的例子是,某公司下有店铺两家,店铺各销售三种产品。A店的销量为a,b,c,而B店的销量为d,e,f。于是可以得到其矩阵:

    5c8988df4253cde1f528353391ff3faf.png

    而每一个店的价格为pa,pb,pc,pd,pe,pd,pf。于是其价格矩阵为:

    8921a185000ac552fffd6c322aeafa8d.png

    两个矩阵相乘,就是多项式的乘法运算。为了美观和后续处理,将价格矩阵转置。就变成了我们的矩阵乘法运算。

    所以说,矩阵是我们日常生活运算的进一步简化。

    特征值

    对于给定矩阵A,寻找一个常数λ(可以为复数)和非零向量x,使得向量x被矩阵A作用后所得的向量Ax与原向量x平行,并且满足Ax=λx。

    其中x就是特征向量,而λ是特征值。

    相当于原有的向量就使用了系数替代,使得原有的计算的难度大大降低。

    在计算店铺销售收入的时候,销售数据矩阵和价格矩阵的相乘会得到一个列向量,该列向量上的每一个值都反映其销售的收入。如果存在一个值,能够更好替代销售数量矩阵,那么简化了销售数量,我们在计算的时候,就可以大大简化计算过程。

    从几何意义上,向量x和向量Ax在空间上共线的时候会存在特征向量,只有共线了才会存在一个值,是的Ax=λx。A矩阵没有改变x的方向,而只是对只是进行长度上的伸缩而已。所以特征值就是特征向量在空间中的长度。特征值越大,就意味着特征向量越长。

    一个变换可由一个矩阵乘法表示,而一个空间坐标系也可视作一个矩阵,而这个坐标系就可由这个矩阵的所有特征向量表示,用图来表示的话,可以想象就是一个空间张开的各个坐标角度,这一组向量可以完全表示一个矩阵表示的空间的“特征”,而他们的特征值就表示了各个角度上的能量(可以想象成从各个角度上伸出的长短,越长的轴就越可以代表这个空间,它的“特征”就越强,或者说显性,而短轴自然就成了隐性特征),因此,通过特征向量/值可以完全描述某一几何空间这一特点,使得特征向量与特征值在几何(特别是空间几何)及其应用中得以发挥。

    从运动的角度,矩阵是一个变换,变换是一种运动,对于运动而言,最重要的当然就是运动的速度和方向,:特征值就是运动的速度,特征向量就是运动的方向。要观察矩阵所代表的运动,需要把它附加到向量上才观察的出来。

    特征向量所在的直线,包含了所有的特征向量,因为他们与x同线,其集合成为特征空间。

    行列式的值

    行列式在数学中,是一个函数,其定义域为det的矩阵A,取值为一个标量,写作det(A)或 | A | 。

    一个矩阵的行列式就是一个平行多面体的(定向的)体积,这个多面体的每条边对应着对应矩阵的列。

    行列式的一个主要应用是解线性方程组的解的个数。当线性方程组的方程个数与未知数个数相等时,方程组不一定总是有唯一解。对一个有n个方程和n个未知数的线性方程组,我们研究未知数系数所对应的行列式。这个线性方程组有唯一解当且仅当它对应的行列式不为零。这也是行列式概念出现的根。

    矩阵的秩

    矩阵不满秩有两种情况(讨论行不满秩):

    • 一,某一行或者列为零。二,某两行或者多行线性相关。

    • 一:讨论某行为零 当乘以一个有零行的矩阵,会对一个向量构成一种"降维"的操作。

    换言之,有几个方程就可以把未知数求解出来的问题。

    特征值分解

    对于矩阵A可以对角化的话,可以通过相似矩阵进行下面这样的特征值分解:

    A=P \Lambda P^{-1}

    1a76abc56341f385da3c6c6bf8679a26.png

    其中\Lambda是对角矩阵,P的列向量是单位化的特征向量。

    逆矩阵

    引入逆矩阵的原因之一是用来实现矩阵的除法。比如有矩阵X,A,B,其中X*A = B,我们要求X矩阵的值。本能来说,我们只需要将B/A就可以得到X矩阵了。但是对于矩阵来说,不存在直接相除的概念。我们需要借助逆矩阵,间接实现矩阵的除法。

    具体的做法是等式两边在相同位置同时乘以矩阵A的逆矩阵,如下所示,X*A*(A的逆矩阵)= B*(A的逆矩阵)。由于A*(A的逆矩阵) = I,即单位矩阵,任何矩阵乘以单位矩阵的结果都是其本身。所以,我们可以得到X = B*(A的逆矩阵)。

    奇异值

    奇异值分解,就是把矩阵分成多个“分力”。奇异值的大小,就是各个“分力”的大小。

    奇异值分解的几何含义为:对于任何的一个矩阵,我们要找到一组两两正交单位向量序列,使得矩阵作用在此向量序列上后得到新的向量序列保持两两正交。

    特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,所以需要使用奇异值分解的方法来实现。

    奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。

    4200167b97054f82157829d25b58e378.png

    假设A为m*n矩阵,U是m*m矩阵, \sum为n*m的矩阵,对角线外其他元素均为0,V^T为n*n矩阵 那么奇异值和特征值是怎么对应起来的呢?首先,我们将一个矩阵A的转置 * A,将会得到一个方阵,我们用这个方阵求特征值可以得到:

    d23408b80742df35a1638ecaf1065a12.png

    这里得到的v,就是我们上面的右奇异向量。

    Excel之矩阵篇

    在Excel中,矩阵采用数组形式进行表示,其快捷键为Shift+Ctrl+Enter。

    说明:如果您有最新版本的Microsoft 365,则只需在输出区域左上角的单元格中输入公式,然后按enter将公式确认为动态数组公式。否则,必须首先选择输出区域,在输出区域的左上角单元格中输入公式(公式必须作为遗留的数组公式进行输入),然后按 Ctrl+Shift+Enter 进行确认。

    一个单元格就是一个变量,一片单元域也可以视为一组变量。为了计算上的方便,一组变量最好给一个数组名。例如A={A1:C3}、B={E1:G3}等。数组名的设置步骤是:选定数组域,单击“插入”菜单,选择“名称”项中的“定义”命令,输入数组名,单击“确定”按钮即可。更简单的命名办法为:选择数组域,单击名称框,直接输入名称就行了。

    Excel中常用的函数有:

    • MDETERM——计算一个矩阵的行列式的值;- MINVERSE——计算一个矩阵的逆矩阵;

    • MMULT——计算两个矩阵的乘积;

    • SUMPRODUCT——计算所有矩阵对应元素乘积之和。

    • 返回指定维度的单位矩阵

    矩阵的加减法

    矩阵的加减与常规一致,对应部分加减即可。

    矩阵乘法

    采用MMULT可以实现

    矩阵相除

    矩阵A乘B的逆矩阵,所以计算公式是“=MMULT(A,MINVERSE(B))”

    具体步骤请看图:

    • 关键是首先选择需要输出的区域,这一步需要你懂一点矩阵知识,逆矩阵是大小不变的,乘法是m*n,n*m,最后是m*m。 

    1f5be295a6f4b9c6b0208ac9e2111b4b.png

    总体而言,理论比较多,但是用起来很简单,希望可以在矩阵计算中更好地帮助你。我是兔子家的萝卜头。

    版权所有,商业转载请联系本人。

    长按关注本公众号

    d33819a7a28fae8475e2bf8ee72664bf.png

    展开全文
  • 我们即将步入这一章的尾声,在本章前面的三个小节中,我们学习了矩阵和向量的表示方法以及加法、乘法等基本运算的规则,并能够熟练利用...我们知道,向量需要选定一具体的基底来进行坐标表示,在这一小节里,我...
    c3723c56d31a094df19ae8d63ef16982.pngef1d02d728cf0b76bde86e3c62b8f3fa.png260f57f1077601d638ac17c3e34fd869.png

    我们即将步入这一章的尾声,在本章前面的三个小节中,我们学习了矩阵和向量的表示方法以及加法、乘法等基本运算的规则,并能够熟练利用Python语言工具正确的对其进行描述和表示。但是显然我们不能仅仅满足于此,那么在这一小节里,我们一起回过头来静静的思考这样一个问题:矩阵A和列向量x的乘法运算Ax有没有其他更深层次的几何含义呢?

    我们知道,向量需要选定一组具体的基底来进行坐标表示,在这一小节里,我们试图去寻找矩阵向量乘法和基底之间的关联关系,从而挖掘其中的深刻内涵。最终,我们将向读者揭示出这样一个重要事实,即:矩阵与向量的乘法,本质上可以看作是对向量基底的一种改变。本节的篇幅不长,但是内容极其重要,他将奠定了一种新的思想方法,请各位读者务必细细体会。

    b8a74df4323e99319cf4cbcb385541e4.gif1.4.1  重温运算法则

    我们首先简单的回顾一下矩阵和向量相乘的运算法则。这里举一个简单的二阶方阵A与二维列向量x相乘的例子。当然,运算过程很简单,在之前的内容中已经涉及,运算公式是:

     b9b1ef0c941aa0feffc8d47a4b56412f.png

    位于矩阵A第i行的行向量的各成分和列向量x各成分分别相乘后再相加,得到的就是结果向量中的第i个成分。这个计算方法有没有感觉到非常熟悉?没错,这不就是多次应用了向量点乘的定义式么?

    即:1707469904beac4ba6fb0832021d114a.png

    b5edaac647817586fa0132201300eab4.png

    对于矩阵与向量的乘法运算,我们如果从行的角度来看确实就是如此。常规的计算操作就是按照这个过程进行执行的,但是看上去更多的是一种规则性的描述,似乎也没有更多可以挖掘的几何内涵。那么接下来,我们试试继续从列的角度再来看看,看看能否给我们带来一些新的收获。

    0171c195bed4dfb1decfbc98397535d5.png1.4.2  列的角度:重新组合矩阵的列向量

    如果从列的角度来审视矩阵与向量的乘法运算,会有另一套全新的计算步骤。可能相比于前面刚刚介绍的从行角度入手的方法,大家对这种思考方式并不是非常熟悉。但是实质上这种方法从线性代数的角度来看,其实还要更为重要、更为直观一些。这里,我们还是用二阶方阵进行举例。

     a8bbb74921c26d09491209caded4c0c3.png

    大家发现了一些规律没有?我们通过这种形式的拆解和组合,也能得到最终的正确结果,这就是从列的角度进行分析的乘法运算过程。

    依托前面的知识我们可以对其进行这样的描述:从列的角度来看,矩阵A与向量x的乘法,实质上是对矩阵A的各个列向量进行线性组合的过程,每个列向量的组合系数就是向量x的各个对应成分。

    这种理解的方式似乎有点新意,我们按照列的角度重新把矩阵A写成一组列向量并排的形式,然后再将其与向量x进行乘法运算,这样一来,从结果的表达式来看,他所包含的几何意义就更加明晰了。

    00b7d90cd5a6e25e377a67292ca40d73.png

    套用上述公式,我们来举一个实际的例子看看,整个过程就更加清楚了。

    bf1b00d521c1e15632c094660b0d9f28.png

    通过乘法计算最终所得到的结果向量就是:位于矩阵第一列的列向量1325dc752228a0b819b36b178529f90b.png的3倍加上位于第二列的列向量e07488df1829aba58b862486d6105087.png的5倍。

    b5edaac647817586fa0132201300eab4.png

    最后不怕啰嗦,我们再总结一下:一个矩阵和一个列向量相乘的过程可以理解成对位于原矩阵各列的列向量重新进行线性组合的过程,而在线性组合的运算过程中,结果中的各个系数就是参与乘法运算的列向量中所对应的各个成分。这是从列的角度去看待矩阵与向量乘法的一种新的视角。

    0171c195bed4dfb1decfbc98397535d5.png1.4.3  再引申:向量的基底的变换

    为了更方便的说明原理,我们依旧使用二阶方阵99b73feaa86c1b2fde47268079421db9.png与二维列向量1962e2f51d675086623dccfa17b04193.png的乘法运算进行分析说明:

    二维列向量e80c4502c76ce66c129462e8c0b338a0.png的坐标是xy,还记得之前我们介绍过的向量坐标的相关概念么?向量的坐标需要依托于基底的选取,向量坐标在明确了基底的前提下才有实际意义,而这个二维列向量,我们说他的坐标是xy,其实基于的就是默认基底:cae341d053598cdf87a5eda5ba198e74.png。那么,这个二维列向量的完整表达式就应该是:9d5567a07244c78716964110f4320a81.png

    好,回顾完了上面的这些基础内容,我们就利用他将矩阵与向量的乘法运算表达式做进一步的展开处理:

    3bde5a7a3e5232cd2b22505b79ad4020.png

    从上面推导过程得到的最终结果来看,是不是已经感觉到初见端倪了?我们更连贯的展示一下式子首尾的对比结果,在矩阵8c298f2ea21cf6d9b51fc6f1eaac50c0.png的乘法作用下,向量最终完成了下面的转换过程:

    08be60ac5cd8b0dab30db5f42b7768e3.png

    更直白的说,通过乘法的运算过程矩阵把向量的基底进行了变换,旧的基底73b3bd3ed933a3688613e2995b45963c.png被变换成了新的基底8258e54e0872b950fec26f8730dfb126.png。映射前由旧的基底分别乘以对应的坐标值90e67c736f546b20b8e40e3014e13b16.png来表示其空间位置,而乘法运算之后由于旧的基底被映射到了新的基底,那向量自然而然应该用新的基底去分别乘以对应坐标值90e67c736f546b20b8e40e3014e13b16.png来描述改变之后的空间位置:d250c4dcbc536f659cbac01f226ce2e4.png,如图1.9所示。

    1646fbed0f4fb558dd6776d25af22a31.png

    图1.9  在矩阵的作用下,向量的基发生了变换

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

    结合矩阵的式子我们不难发现:矩阵A的第一列ceef4b2eb77fa1e0a5bd0527fc290b76.png就是原始的默认基向量74b5c5c2902f24689cf5a36df5e2d15d.png变换后的目标位置(新的基向量),而第二列5e208681e1d028b9c060aa64dd1f50f3.png就是另一个基向量d5d99d08e1870d18f2c13a32560560b5.png映射后的目标位置(新的基向量)。

    基底的变换明确了,那向量的坐标呢?映射后得到的新向量,如果以向量a6a83895cca2df5075db8a5220afa2ec.png为基底,他的坐标仍是d0699d9ac2ddaab3622b15b22817bac6.png,如果以默认的向量d569398be5bf7bb021dc1d8e7a5c4dc1.png为基底,那么其坐标就是f4e3880125e949bbe3ee2a6ecd704f4c.png

    1.4.5  扩展:三阶方阵的情况

    为了使得结果更加让人信服,我们再来看一个三阶方阵和三维列向量相乘的例子。同理,运算也满足这个过程:

    0d89d4abd373277c20483dff10e3bb3c.png

    是不是和二阶矩阵的情况是一模一样呢?三阶方阵将三维列向量的基底做了映射转换,方阵的第一列504854795a0b5ddacd8f22e65e07d6e8.png是原始基向量794bdfba10b82f59cc71669e30c1b146.png映射后的目标位置(新的基向量),方阵的第二列59b459bafbfe10bd4da16bcf50ad6b6d.png是原始基向量b99b5b79fff46c075f21842139dddc2f.png映射后的目标位置(新的基向量),而方阵的第三列2fbfc5e8dac5143e935c7c0676e7e5a4.png则是原始基向量b2659fc69e9b584ce1a71d65f0c710ca.png映射后的目标位置(新的基向量)。

    因此,最终的道理也是一样的,映射后的目标向量如果在新的基底0a68499fb5d0a3ea375bfa1245850d1f.png下来看,其坐标仍然是90830a8f1d43e79f403ed9deb3819c20.png。如果放回到原始基底63a327d2b037947c555fdb4546dcd76a.png下来看,将新的基底1d0cd4aa4b6499b0a8f4276ac913c7e4.png和他所对应的坐标相结合,就能得到默认原始基底下的坐标值了,具体表示为:5ef0d6e3fad62278b9a6c1564c0af0c8.png

    1.4.6  更一般的:m×n矩阵乘以n维列向量

    看完了二阶和三阶方阵的实际乘法例子,此处我们需要进行进一步的抽象和概况。现在我们来看最一般的情况,矩阵A02bafbf4dfbb18221361cf49d5b9f48c.png形状的一般矩阵(其中0231567b59d57f45aaea060cc4dd6ac0.png),而向量x是一个n维列向量,没有任何的特殊性了。

    此时,我们按照上面的步骤来演示矩阵84a6fd15c8a54be5b96432c94b78c640.png和向量ec1111c2b453af85118f86d856fad2e8.png进行的乘法运算:

    27acfb2262803e36d226aa1a238bd4a1.png

    m×n形状大小的矩阵A的作用下,原始的n维基向量9e074c726e76c34c43de921ac36b89c0.png被映射成了新的m维基向量:2399269443ea95bb72d7ef23c6b01596.png,原始的n维基向量4cf7b57f66025a0722324f5beb7472c0.png被映射成了新的m维基向量:53c24cb342feca21c4c0dcb0d3374e21.png,……,原始的n维基向量680f106aceccfa2aa38b8b6f12285d16.png被映射成了新的m维基向量:477fd90b102e26d2a99e1a6069f5bfc2.png

    从上面的推导结果中我们可以发现,4b3e23f56d6c014354edd6afada5e07b.png这种情况其实最值得讨论,因为此时矩阵A是一个普通的矩阵,而不是之前所举例的特殊方阵。在这种最一般性的情况下,映射的前后,列向量x的基向量维数甚至都发生了变化:原始的n维列向量x被变换成了nm维列向量进行线性组合的形式,其最终的运算结果是一个m维的列向量。

    b5edaac647817586fa0132201300eab4.png

    由此可以看出,映射后的向量维数和原始向量维数的关系取决于矩阵维数mn的关系:如果m>n,那么映射后的目标向量维数就大于原始向量的维数,如果m<n,那么目标向量的维数就小于原始向量的维数,当然了如果mn二者相等,那就是前面所举的方阵的特殊情况了。

    0171c195bed4dfb1decfbc98397535d5.png1.4.7  关于基变换:一些意外情况

    实际上,如果仅仅停留在上一小节讨论的结果,那可能会显示出我们思考问题不够全面、不够准确。

    首先,“经过矩阵变换,会将向量原始的基底变换成为一组新的基底”这句话的表述其实并不完全准确,之所以在前面这么描述只是为了方便大家理解并建立一种新的概念,实际上一些特殊的情况并未考虑在内。

    为什么这么说呢?

    对于一个m×n的矩阵An维列向量x,经过Ax的乘法作用,xnn维默认基向量被转换成了nm维的目标向量。

    a48bb35a092289065f9aa294acea51c5.gif

    我们针对mn的大小关系,分下面几种情况进行讨论:

    n > m的时候,显然这n个向量线性相关,因此不构成基底;

    m的时候,即使这n个向量线性无关,由于他们不能表示m维空间中的所有向量,因此也不能称之为m维目标空间的基底;

    当且仅当n = m,且这n个向量线性无关的时候,他们才能称之为目标空间中的一组新的基底。

    不过,即便是有这些意外情况的存在,我们本节所讨论的内容仍然具有重要意义。矩阵A的各个列是列向量x默认基底经过转换后的目标向量,正因为他们在维度和线性相关性方面存在着多种不同的情况,因此这组目标向量的张成空间和原始向量所在的空间之间就存在着多种不同的对应关系,这便是我们第二章里将要重点讨论的空间映射相关内容。

    ▼往期精彩回顾▼前言1.1 描述空间的工具:向量1.2 基底构建一切,基底决定坐标1.3 矩阵,让向量动起来5fa008ad92dbe9abf71d93538c9879fc.png本书所涉及的源代码已上传到百度网盘,供读者下载。请读者关注封底“博雅读书社”微信公众号,找到“资源下载”栏目,根据提示获取。c5a0496ee0d2a62627f1f69c58d5aa80.gif

    如果您对本书感兴趣,请进入当当网选购!

    8a76d0a3a80b6ea3651a3cb0407e9a64.png

    08109eea30a2ebcf800526b5d47f0f4b.gif

    f1dd54d0244f143d8c5910f720a743bd.png

    展开全文
  • 特征向量和特征值是怎么计算的呢? 根据特征值和特征向量的定义,我们有: 其中 是特征值; 是特征向量,是一个N*1的向量。我们可以求得N个特征值(从大到小排列了,这样做的好处后面会看到) ,对应的特征向量是 。 ...

    0引言

    在线性代数中,一个矩阵实际上就是一个线性变换的参数,比如A=(x,y,z),我们可以用矩阵B=[[1,2,3],[5,4,7],[9,8,6],[11,21,22]]来做一个映射:

    A*B=[x+5y+9z, 2x+4y+8z, 3x+7y+6z, 11x+21y+22z],我们以x,y,z为基础,进行线性组合得到了4个新的数字。

    假如说B=[[66,666,6666],[23,233,2333],[11,111,1111]],

    A*B=[66x+23y+11z, 666x+233y+111z, 6666x+2333y+1111z]=[a,b,c]

    我们就把(x,y,z)空间里的所有点映射到了一个新的坐标系,得到(a,b,c)。

    说这些是为了让矩阵相乘更容易理解,通常来说我们遇到的可能仅仅是矩阵相乘,和坐标系变换搭不上边。

    如果A和B非常非常大,A*B这个计算会有很多困难,比如计算量大、存储压力大。假设:

    97d3a4af558f848c530de007c96739bb.png

    式中,下角标表示矩阵的行数和列数。A和B相乘的话,我们需要进行10000*2000*1000次乘法(加法的时间是小头)。我们需不需要做这么大的矩阵之间的计算呢?需要,假如说A是购物网站用户到商品类型的映射,也就是对某一类商品的喜好程度;而B是一类商品下具体商品的热度。那么A*B的一行,就在一定程度上反映了某个用户对每一个商品的喜好程度。购物网站的用户数和商品数都非常巨大,需要的乘法次数太多了。

    有没有什么办法减少矩阵A和B相乘的时候的计算量呢?有的,我们可以用矩阵分解的方法,将A和B分解为若干个小矩阵的乘积。具体怎么做,为什么可以这样做呢?

    1方阵的特征值分解

    我们首先看一个方阵是如何分解的。

    假设我们有一个满秩的方阵A,长宽都是N,我们称一下操作为特征分解:

    e0c2841f15794bcd33223ec0df5bfebb.png

    式中,Q是由A的特征值向量组成的矩阵,

    3ad467b07920a775b86009e24b657ee6.png

    是一个对角矩阵,对角线上的元素就是A的特征值。

    特征向量和特征值是怎么计算的呢?

    根据特征值和特征向量的定义,我们有:

    7c5a6841dffb76dd1790cb6ddc4f3e18.png

    其中

    b4863539dff8d67d632cc08212130686.png

    是特征值;

    aa40f1394cb78f1a1b0de87be78da011.png

    是特征向量,是一个N*1的向量。我们可以求得N个特征值(从大到小排列了,这样做的好处后面会看到)

    6c36e3cb043e6dafea38a4d78f0d4587.png

    ,对应的特征向量是

    f219ba60588379a899053b663cfd35e5.png

    然后我们令

    01e37db0bb8fca4d104ec7c836089acf.png

    3ac95411a99c125abae505fe10605ea6.png

    到目前,看起来我们似乎把事情搞复杂了,一个矩阵被分解成了3个和它一样大的矩阵。涉及的计算量增加幅度可不止2倍啊。

    特征值的绝对值大小是有规律的,从大到小衰减很快。特征值绝对值的大小,相当于对应的特征向量在矩阵A中的“影响力”,绝对值越大,特征向量的影响力越大。我们把影响力较大的特征值留下,其他的不要了,特征值矩阵就会缩小很多,当然了,

    f2001cbaaa0af534823aea05eb8c3334.png

    对应列和

    f03e81f0200584fe5eaaacd581b258cf.png

    的对应行需要删掉。这样,3个矩阵的大小就会缩小很多,计算量也是。

    假设有方阵

    f079d52aff223ecbab4ef3e71f9d0eae.png

    ,我们可以求得3个特征值是(4,-4,1),对应的特征向量是

    f0cb1cafad79d0768ddde81569d613f3.png

    注意,特征向量的符号和元素的绝对值大小是任意的,比如也可以

    e9afe2c5550a498798bb4e4135384b83.png

    这是方程组决定的。当然了,勤快一点的人会做一个归一化。

    这样我们就得到了矩阵分解的结果:

    62017371712088f71f6fb82d462fda28.png

    3个特征值中,1看起来比较小,我们不要了。这样,矩阵分解的结果就成了:

    33bbded4937d82964b8d0614a6ecf0fd.png

    我们用完整的矩阵分解结果来计算

    5ad966d7cf14e932cb731d7b7eef6225.png

    ,可以得到一个和A一模一样的结果。如果我们用缩小版的矩阵分解结果,就会得到:

    87a02fc9ed0e67b7030b81ccdd7d1c8b.png

    看起来有点像A,有些地方是错误的,这就是我们丢弃特征值,也就是丢弃一部分信息的后果——图像处理中,这些不重要的特征值对应的可能就是噪点,删掉最好了。这里使用python计算得到的结果,因此有小数。

    实际应用中,我们可以删掉很多特征值,3个矩阵会很小。

    生产和生活中,我们遇到方阵的机会很少。比如购物网站的用户数和商品数量相等的机会就不大。通常需要处理的是高宽不等的矩阵。而这样的矩阵没办法求逆矩阵,也就没办法使用特征分解的方式分解了。

    那普通矩阵可以分解吗?

    2. 奇异值分解

    当然了,就像我们前面所说的用户-书籍矩阵一样,大部分情况下,我们遇到的不是方阵,求逆是不用想了。这时候,我们就需要用另一种方法来分解矩阵——奇异值分解。

    2.1. 奇异值分解的目标

    奇异值分解是特征分解在矩阵上的一个推广,也是是一种数据压缩的方法,可以把一个(任意形状的)矩阵分解为3个较小的矩阵,便于存储和计算。这个算法比较简单,但是应用非常广泛,在图像处理、推荐等领域作用很大。

    假设我们有矩阵B,这个矩阵有N行M列(这里假设N>M)。奇异值分解的目标就是:

    bed62723afe3473f9497fc6afa732ac7.png

    式中,U和V都是正交矩阵,U是N*N的方阵,

    69481d7d879c555ce4671366e504f737.png

    是N*M的矩阵,上方M*M的部分是一个对角矩阵;K=rank(B),左上方K*K的部分是一个对角线元素全不为零的对角矩阵;V是M*M的方阵。

    2.2. 两个辅助信息

    我们可以这样得到一个方阵

    8e7b2b7aa7394bc842b525a70fdd476b.png

    方阵C的长宽都是M。(可以证明)由于矩阵C的秩为K(K<=M),它矩阵分解得到的特征值有K个,因此对角矩阵的对角线上有且只有K个元素非零。矩阵V中,与对角矩阵对角线上0元素对应的部分,没啥价值了——它们与矩阵C的元素取值无关。因此,对C的矩阵分解结果可以这样表示:

    7b2f9fd342e77a85a0d9b9490cbf5db8.png

    式中,矩阵

    d1f3081f059fc59bdd234432eca83cc1.png

    的形状是M*K,

    ba82b3b85e0ca8a44bad563ec7f1580d.png

    的形状是M*(M-K)。

    我们还可以得到这样一个方阵

    dd085c53b4c9cd93643b1b09488b50db.png

    和公式2.2类似,对D的矩阵分解结果也可以这样表示:

    4f5ea935debd57fcd54907d021eeffef.png

    2.3. 奇异矩阵和奇异值的计算

    也就是说,我们可以把C,D两个方阵给特征分解了。而特征分解得到的特征值,正好是奇异值的平方;特征分解得到的特征向量矩阵,就是奇异值分解需要的左奇异矩阵和右奇异矩阵。问题是,通过分解C得到的奇异矩阵,与通过分解D得到的奇异矩阵,实际上是不一定相等的——换句话说,我们会得到两个版本的奇异矩阵,采用哪一个呢?

    我们需要设这样一个计算过程,它能保证左奇异向量和右奇异向量的符号以及元素绝对值是“配套”的。

    d6348a61d58add253afedbf7cc630a9a.png

    前面提到过,

    6c9543a96ad517ca6eab27ee855a8cf2.png

    的秩为K,我们可以把这个等式中等号两边的矩阵进行裁剪,把

    6c9543a96ad517ca6eab27ee855a8cf2.png

    对角线元素为0的部分给裁掉,得到:

    b424f63ac9856bddfc5188e28a559c85.png

    式子2.4是左奇异矩阵、右奇异矩阵和奇异值之间需要满足的条件。

    我们可以首先求C;然后对C进行特征分解,得到特征值及其二次根(奇异值)

    1593a91f5def6a798f41207247ab89e9.png

    和右奇异矩阵中的“有效部分”

    e57a8ba14463c77516c566b9ac1f849b.png

    接下来,以特征值二次根为奇异值,就可以使用公式2.4所示的关系,得到左奇异矩阵的“有效部分”

    74039be1e4f7d8ddc88a56f13d11c940.png

    本小节开头那个问题的答案就是:使用C或D的特征值的二次根即可。

    至此,我们就把矩阵B表示为三个矩阵的乘积(它们的形状分别为N*K,K*K和M*K)。一般来说,K<<M,因此三个矩阵的元素个数总数,比矩阵B要少很多。另外,我们可以把一些绝对值较小,即影响力较小的奇异值去掉,进一步减小三个矩阵的规模,以得到更大的压缩率。

    3结束语

    奇异值分解的计算过程看起来比较简单——实际上计算量还是比较大的,学术界和工业界搞了很多策略来提升分解的速度。在学会计算过程之后,我们可以多想一想,奇异值分解可以用在哪些场景。

    感谢

    simonwww.zhihu.com
    c53b7f98db5376819416cad174569cdf.png

    的提醒,让我发现自己对SVD细节的掌握不够到位,于是有了本次的重写。这次复习的体会是,一个模型或者算法,就和橡皮泥一样,永远没有固定的形态。同一个模型或算法,在不同的场景里会有不同的含义,还会有一定的改动。因此,对模型“了如指掌”是比较困难的。从另一个角度看,它们是常看常新的,过一段时间还能激起我们的兴趣。

    注意:本文为李鹏宇(知乎个人主页https://www.zhihu.com/people/py-li-34)原创作品,受到著作权相关法规的保护。如需引用、转载,请注明来源信息:(1)作者名,即“李鹏宇”;(2)原始网页链接,即当前页面地址。如有疑问,可发邮件至我的邮箱:lipengyuer@126.com。

    展开全文
  • 四阶行列式的计算;N阶特殊行列式的计算(如有行...讨论一个向量能否用和向量组线性表示;讨论或证明向量组的相关性;求向量组的极大无关组,并将多余向量用极大无关组线性表示;将无关组正交化、单位化;求方阵的特...

    四阶行列式的计算;

    N

    阶特殊行列式的计算(如有行和、列和相等);

    矩阵的运算(包括加、减、数乘、乘法、转置、逆等的混合运算);

    求矩阵的秩、逆(两种方法);解矩阵方程;

    含参数的线性方程组解的情况的讨论;

    齐次、非齐次线性方程组的求解(包括唯一、无穷多解);

    讨论一个向量能否用和向量组线性表示;

    讨论或证明向量组的相关性;

    求向量组的极大无关组,并将多余向量用极大无关组线性表示;

    将无关组正交化、单位化;

    求方阵的特征值和特征向量;

    讨论方阵能否对角化,如能,要能写出相似变换的矩阵及对角阵;

    通过正交相似变换(正交矩阵)将对称矩阵对角化;

    写出二次型的矩阵,并将二次型标准化,写出变换矩阵;

    判定二次型或对称矩阵的正定性。

    第二部分:基本知识

    一、行列式

    1

    .行列式的定义

    n^2

    个元素

    aij

    组成的记号称为

    n

    阶行列式。

    (

    1

    )它表示所有可能的取自不同行不同列的

    n

    个元素乘积的代数和;

    (

    2

    )展开式共有

    n!

    项,其中符号正负各半;

    2

    .行列式的计算

    一阶

    |α|=α

    行列式,二、三阶行列式有对角线法则;

    N

    阶(

    n>=3

    )行列式的计算:降阶法

    定理:

    n

    阶行列式的值等于它的任意一行

    (列)

    的各元素与其对应的代数余子式乘积的和。

    展开全文
  • 分组算法计算流程 分组算法要对输入数据进行分组,然后按数据分组进行运算。一个典型的分组算法由三部分组成:数据分组、分组运算、链接模式。 数据分组: 数据分组在加密时会将明文数据分组为加密算法能够处理的...
  • 在自然语言处理中,最基础的计算...但是从单词到词向量的映射千变万化,究竟怎么样的映射方式,或者说怎么样的词向量构造方法更符合我们的计算需求呢?我们可以从以下这些角度去评价和比较不同词向量构造方法的优...
  • 相关性表示的是两个观测的数据向量之间的变化关系。一般来讲研究对象(样品或处理)之间使用距离分析,而元素(物种或环境因子)之间进行相关性分析。两个变量之间的相关性可以用简单相关系数(例如皮尔森相关系数等)...
  • 具体就是有两个矩阵,每行表示一个向量,现在就是要计算两两之间的距离,得到一个距离矩阵,怎么操作呢?我们知道,在python 的numpy 中,cdist是可以实现这个功能的,那么他们是怎么实现的呢?放弃了,开发太慢,...
  • 2015-12-13 回答线性代数(linear algebra)是数学的一个分支,它的研究对象是向量向量空间(或称线性空间),线性变换和有限维的线性方程向量空间是现代数学的一个重要课题;因而,线性代数被广泛地应用于抽象...
  • 可以理解为用户的输入账号密码验证码等的一时间集合,在评估模型中会转为向量进行分析计算怎么获取用户的输入账号密码验证码的时间?这个可以用自定义的Js插件实现,具体操作参考我的博客。 2.RiskEvaluate.sca...
  •   在之前我们已经了解了线性方程并知道了怎么解他们。也知道线性方程能够用矩阵形式表示,接下来我们主要要就向量所在的结构空间。   在第一篇博客,我们简单介绍了什么是向量。接下来将它形式化,我们首先...
  • 我们怎么用数值化的方式表示呢,这样才能方便计算机去计算处理。 在字符编码中也被分配了一定的数字来代表某个字符,比如UTF-8等字符编码方式。每一个数字都可以对应于某个字符,对于一些离散的应用来说,这个编码也...
  • 点击蓝字关注我们通过上一篇文章,大家已经了解到R中有4种数据类型(数值型、字符型、逻辑型、因子型),它们的组合形式有5种(向量、矩阵、数组、数据框、列表)。今天我们通过一个例子来介绍如何在R中创建常用的数据...
  • (4)余子式与代数余子式矩阵常考题型(1)计算方阵的幂(2)与伴随矩阵相关联的命题(3)有关初等变换的命题(4)有关逆矩阵的计算与证明(5)解矩阵方程(6)矩阵秩的计算和证明向量常考题型(1)判定向量组的线性相关性;(2)向量组...
  • 自从有了vector人们就非常的喜欢使用向量,而不再怎么使用数组了。vector的使用原理:vector的基层是由数组构建成的。vector初始时会申请某一确定的空间,当元素已经存放满且仍需要添加元素的时候,vector会重新进行...
  • Faiss是Facebook提出用来处理大规模向量搜索召回问题的一种工具,在embedding大行其道的今天,有关向量之间计算相似度的场景很多,faiss是该类场景的首选工具。线上serving时,使用faiss进行向量搜索召回,有一个大...
  • 超松弛迭代法有一个松弛因子,它的研究中心就是怎么求最佳松弛因子,现实中拿到一个方程,你总不能说,我先试一下,慢慢试,试出最佳因子,你试第一个的时候,结果就已经出来了,那你还要松弛因子干嘛,你要的是方程...
  • 问对问题,找对方法,...-上海交大032-047行列式的定义、性质与计算10/03048-078矩阵的定义、运算10/03079-117可逆矩阵、初等变换与秩10/04118-143最大线性无关向量组与秩10/05144-159线性方程组解的判断与求解方法...
  • 但是换成64*64尺寸的图片,可以训练出svm模型,但是检测时会出错,觉得应该是detector的问题,但是不知道该怎么重写? 对提取好的HogFeatureMat进行pca降维后检测同样会出现类似的错误。detector该怎么重写,里面...
  • 用\运算解以下线性方程计算并显示误差向量。 3a+6b+4c=1 a+5b=2 7b+7c=3</p>
  • 本文使用矩阵特征分解的方法来计算动态规划的通项公式,如果对线性代数这一块不太熟悉的,墙裂推荐下列视频基变换​www.bilibili.com特征值与特征向量​www.bilibili.com然后是动态规划的状态转移方程,可以参考永远...
  • 数组与矩阵数组是由一相同类型的数据元素构成的有限序列,访问数据元素的方式是使用元素各自的序号进行访问,也就是下标。数组它本身是线性表的推广,一维数组就是一个向量形式的线性表,二维数组就是由一维数组...
  • //计算projected_test与projected_train中每个向量的欧氏距离 Euc_dist = (double *)malloc(sizeof(double)*TRAIN_NUM); for (i=0;i;i++) { temp = 0; for (j=0;j;j++) { temp = temp + (projected_...
  • %用来存储恢复的theta(列向量) Pos_theta = [];%用来迭代过程中存储A被选择的列序号 r_n = y;%初始化残差为y times = 1; while 1 loop = loop + 1; % for kk=1:K%最多迭代K次 %(1) Identification...
  • D-改革春风吹满地

    2018-01-14 17:34:05
    而因为给定的是点的坐标,所以面积表达式应该用向量形式,这里选择的是向量的叉积来计算面积,将每一坐标储存在数组中,再算出向量坐标储存在数组中,编写叉积函数,给每一组向量坐标使用此函数,累加在取绝对值得...
  • 主成分分析(PCA)

    2019-09-20 13:59:19
    怎么计算主成分 特征值和特征向量 四、主成分向量 五、将数据映射到新的主成分坐标系中 PCA的步骤 方差 方差是指一数据中的各个数减去这数据的平均数的平方和的平均数。 例:(1,2,3,4,5) 平均数=3...
  • 矩阵乘法的理解

    2020-11-05 14:01:17
    很多同学可能和我一样,在学习矩阵乘法的时候感到... 矩阵×\times×向量(1)向量×\times×向量批处理(2)方程(3)初等行变换(4)线性组合3. 矩阵×\times×矩阵(1)向量内积批处理(2)方程批处理(3)初等
  • nlp-transformer

    2020-03-06 10:37:38
    向量计算 多头注意力 组合多头生成的z 整个流程的简介 多头注意力实际解释 位置编码是什么? 实例解释 直觉上理解 Batch Normalization 针对多个样本的同一维度的输出值; Layer Normalization 针对一...
  • 傅里叶级数

    2019-07-23 20:13:28
    从线性代数的角度来看,线性空间中的任意...因为单位坐标基是一标准正交基,所以你只要计算被表示向量与基向量的内积,就能得到相应的系数,想象下力的分解与合成。否则常规做法是求解线性方程。 现在就可以从...
  • 机器怎么理解句子一直是一个难题,以前有人尝试用句子中出现的词语频率来表达这个句子的含义(TF-IDF)。 也有人想把句子中的词语先向量化,然后再叠加句子中所有向量化的词语来表达一句话。 这些的确都是一种计算机...

空空如也

空空如也

1 2 3 4
收藏数 72
精华内容 28
关键字:

向量组怎么计算