![深入浅出AI算法:基础概览](https://wfqqreader-1252317822.image.myqcloud.com/cover/872/40107872/b_40107872.jpg)
2.1 线性代数
线性代数是数学的一门分支学科,研究的是线性空间中的函数问题。顾名思义,“线性”是指要研究的代数之间的关系是简单的一次关系,研究过程中没有复杂的数学运算(如平方和开方);“代数”是指用符号代替数字,方便研究。
对于数学关系f(x+y)=f(x)+f(y),线性代数不关心其中x和y的具体含义是什么,其研究的是拥有这种线性映射关系的函数f所具备的性质。
函数是指输入一个数,在经过某些计算后输出另一个数。随着研究的问题越来越复杂,有时需要输入多个数,然后经过运算输出多个数。从这个角度来说,线性代数解决的就是多输入或多输出的函数问题。
2.1.1 名词解释
在线性代数中,单个数称为标量,用中括号括起来的多个输入的数或多个输出的数(多个标量)称为向量和矩阵。标量、向量和矩阵是算法工程中经常用到的线性代数核心概念。下面从数学角度给出标量、向量和矩阵的概念,以便加深读者对线性代数基本概念的理解。
• 标量:表示一个简单的数,如29、31等。
• 向量:表示一组有序的标量,能够写成一行或一列的形式。
• 矩阵:表示一组有序的向量(一个或多个),可以用二维数组的形式表示。
下面来看一个例子。假设某家包子铺周一能卖出50个肉包,这里的“50”就是一个标量;如果这家包子铺某周每天卖出的包子数量依次是[50, 51, 52, 53, 52, 48, 45],则“[50, 51, 52, 53, 52, 48, 45]”是一个向量;加上这周每天卖出的豆沙包、咸菜包的数量,组成如下数据形式,就是一个矩阵。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/031-1.jpg?sign=1738768182-gZu2NhdSmZSgysgl4QADaBuLWkxFakCB-0-4ac5382517fa36adf5c4f452f3d47ee9)
2.1.2 向量和矩阵
标量的概念比较简单,因此我们重点讲解向量和矩阵。向量和矩阵在算法工程中经常用到。例如,一条样本的所有特征值构成一个向量,一批样本的所有特征值构成一个矩阵。几乎所有的算法公式都可以写成向量或矩阵的形式,机器学习中的算法模型通常所说的批(batch)训练,其底层的计算逻辑就是利用向量和矩阵的运算。由此可见,掌握向量和矩阵的相关知识,对于算法“内力”的修炼至关重要。既然涉及运算,自然会有相应的运算法则,那么向量和矩阵的运算法则是怎么样的呢?
向量可以分为行向量和列向量,二者在本质上并无区别,只在进行运算时有差别。下面通过生活中的具体例子,逐一介绍与向量有关的运算法则。
某公司有n名员工,月工资用向量[a1, a2, …, an-1, an]表示,其中ai表示第i个员工的月工资数额。
情形一:公司业绩不错,公司老板决定给每位员工涨薪20%,可以用向量与标量之间的乘法来计算涨薪后的工资,如表2-1所示,其中k为原工资倍数,即1.2。
表2-1 员工涨薪情况(一)
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/032-1.jpg?sign=1738768182-aLjvrHnseXiGKgUb0ij3ZhdpvIp8Ffvy-0-c276984e9a8bc97e7d09df192768a2af)
具体计算方法用数学符号表示如下,得到的结果仍然是向量。向量与标量之间的除法类似,可以理解为向量与标量的倒数相乘。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/032-2.jpg?sign=1738768182-Aw0qmdZhpel7bJWhKDrF0Uz10vwKWrDJ-0-f015fad5955023225b9701611fe0ff6b)
情形二:公司业绩不错,根据员工完成业绩的不同,老板决定对不同的员工给出相应的工资涨幅。以绝对值涨幅为例(也可以是不同的比例涨幅),给第i位员工每月增加bi元工资,可以用行(列)向量与行(列)向量之间的加法来计算涨薪后的工资,如表2-2所示。
表2-2 员工涨薪情况(二)
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/033-1.jpg?sign=1738768182-YtUrNebjQLOjAsHoyBcflfrEQnR3BW5Z-0-60b97ecfeaad5ab66f961f0bc6c8f855)
具体计算方法用数学符号表示如下,计算结果仍然是向量。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/033-2.jpg?sign=1738768182-pxzvCFCQjJTQIRfca5BLVHyle3aWImVe-0-0abb2f09a60c388ed67a9d6b8656a0a5)
向量与向量之间的减法与加法类似,计算结果仍然是向量。
情形三:老板在按照不同的涨幅比例给员工涨薪之后,想知道工资开支的总预算是多少,可以用行向量与列向量之间的乘法来计算。具体计算方法如下。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/033-3.jpg?sign=1738768182-gkv450Thlia3LoUEtGMpF6huD04AIUR0-0-0b55dafa64ecc7fe694910e4d16ab736)
由此可知,行向量与列向量相乘的结果是一个标量。
根据行向量与列向量相乘的例子可知,使运算成立的一个隐含条件是,行向量的列数必须与列向量的行数相等,如例子中的向量长度均为n,这有助于理解后面的矩阵运算(向量是一种特殊的矩阵)。列向量的列数与行向量的行数都等于1。一个列向量与一个行向量相乘,即可得到一个矩阵,具体计算方法如下。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/034-1.jpg?sign=1738768182-mXEVsG4IXZmwvAT2Plm0EA7Oi1atYZzh-0-67d7f29cf27c5e89a1417c744f4e6778)
在机器学习中,向量通常用于表示特定维度空间中不同维度的特征值,因此又称为特征向量。例如,一个二维特征向量[1, 2]表示两个特征,第一个特征维度的值为1,第二个特征维度的值为2。既然是空间,那就存在距离的概念,即同一个特征空间中不同特征向量之间存在着某种关系,如相似的特征表现。假设有另一个二维特征向量[2, 4],其在两个特征维度上的值分别为2和4,可以发现,这个二维特征向量和前面的二维特征向量,在各个维度上的特征值大小恰好相差一倍,这说明二者的特征表现相似,只是程度不同。当然,在实际算法工程中,特征向量之间的关系会有更复杂的度量方式,如相似度、相关系数等。
矩阵运算和向量运算的运算法则类似。标量与矩阵的加法、减法、乘法,只需将标量与向量的每一个值分别相加、相减、相乘,得到的结果仍是矩阵。以标量与矩阵的乘法为例,计算方法如下。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/034-2.jpg?sign=1738768182-A1HDsd5Y4TPIPFNEMoA2ITM7WpJKO1SW-0-362138549809fb28526762047a676fd4)
矩阵与向量之间只有乘法。如果矩阵与行向量相乘,那么行向量的列数必须与矩阵的行数相等,并且行向量必须位于乘号的左边,计算方法如下。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/035-1.jpg?sign=1738768182-vHuRC5N1stjqZXH5CLIONAYDV9WlT179-0-a9fad175f74770468a597e6c0f55ecaf)
如果矩阵与列向量相乘,那么列向量的行数必须与矩阵的列数相等,并且列向量必须位于乘号的右边,计算方法如下。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/035-2.jpg?sign=1738768182-0Xndvd48Mv5wmZ1a6t12S0CnCBywHWUP-0-a1ec6a9d46843849c7c4a51d021dd426)
矩阵与矩阵相乘,乘号左边矩阵的列数必须与乘号右边矩阵的行数相等,计算方法如下。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/035-3.jpg?sign=1738768182-e9lyufa2yNlv5S8wt7SSpJTCyX0GIMrc-0-54969eebfa500d7ee8b154f7d3729634)
假设A、B、C表示矩阵。
矩阵之间的加法满足交换律,计算公式如下。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/035-4.jpg?sign=1738768182-RESZYWZkBBtJSBXsnDZa9vCfC5cFR7bO-0-cbb8625a5f73ac8e672f3f9fae0c5e90)
矩阵之间的乘法满足结合律,计算公式如下。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/036-1.jpg?sign=1738768182-TVAFfULIGfmF3cbXkQOCBBjqS2CzUXwG-0-9f35ed7debae8e5158331aa96074709b)
在线性代数中,关于向量和矩阵的知识点还有很多,包括单位矩阵、对角矩阵、对称矩阵等,这些知识点在PCA降维、协同过滤和矩阵分解等算法中都有所运用,下文只对这些概念进行简单介绍,感兴趣的读者可以自行深入拓展学习。
单位矩阵是一个方阵,这个方阵从左上角到右下角的对角线(称为主对角线)上的元素均为1,其他元素均为0,示例如下。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/036-2.jpg?sign=1738768182-lt2VhVhAOPP4w3lxwW4nYMMMqTxPAlQj-0-2d52d54113de2f82123faa90440ac036)
对角矩阵也是一个方阵,这个方阵除主对角线上的元素外,其他元素均为0,主对角线上的元素可以不为1,示例如下。由此可知,单位矩阵属于对角矩阵。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/036-3.jpg?sign=1738768182-okkhTgNqz3LuqZuOWqPRmO7P0ADm8dKc-0-3ac4d246c63c636981c77f7692257b19)
对称矩阵也是一个方阵,这个方阵只需满足以主对角线为对称轴,两边对称位置的元素相等,示例如下。由此可知,单位矩阵和对角矩阵都属于对称矩阵。
![](https://epubservercos.yuewen.com/6B6C25/20862583608966506/epubprivate/OEBPS/Images/036-4.jpg?sign=1738768182-biABjOIPpPhk0WPQrM5x87ar2h9lsAqC-0-cdf161b2afc947501ffd1de0258ffe23)