机器学习的核心是发现数据中的规律。但无论信息是客户评价、股票价格,还是狗的照片,计算机要处理它,首先必须将其转化成它能理解的语言:数字语言。线性代数正是这种语言的语法。它提供了一套强大高效的工具,用于整理和处理这些数字,使其成为几乎所有机器学习模型的计算支柱。用数字表示数据在算法学习之前,我们需要一套组织数据的方法。考虑一个实际例子:预测房价。一栋房屋的信息可能包括其面积(1,500平方英尺)、卧室数量(3间)和房龄(20年)。我们可以用一个有序的数字列表来表示这栋房屋,这在线性代数中称为向量:$$ \text{房屋_向量} = [1500, 3, 20] $$这个向量不仅仅是一个列表。它是三维空间中的一个点,每个维度对应一个特征。另一栋房屋,例如一栋2,100平方英尺、4间卧室、5年房龄的房屋,也只是同一空间中的另一个点:$[2100, 4, 5]$。当我们收集数千栋房屋的数据时,可以将这些向量堆叠起来,形成一个数字网格。这个网格就是矩阵。矩阵中的每一行代表一栋房屋(一个样本),每一列代表一个特征(面积、卧室数量、房龄)。这个矩阵就成为机器学习模型处理的核心对象。高效地进行数据计算一旦数据被组织成向量和矩阵,我们需要进行计算。我们可能需要调整模型参数,计算两个项目间的相似度,或者转换数据以凸显重要规律。如果没有线性代数,你将不得不编写循环来逐一遍历数据集中的每个数字。这速度慢、效率低,并使代码难以阅读。线性代数提供了一种方式,能用一行代码表示整个数据集上的复杂计算。像矩阵乘法这样的运算使我们能够同时处理数千个数据点。这不仅仅是为了方便;它也是现代机器学习在计算上可行的原因。NumPy等库经过高度优化,能够以极快的速度执行这些向量和矩阵运算。机器学习模型的蓝图许多机器学习算法不仅仅被线性代数支持;它们更是由线性代数定义的。线性回归: 将一条线拟合到一组数据点的经典问题,表示为求解方程 $Ax = b$。其中,$A$是我们的数据矩阵,$b$是我们希望预测的结果向量(例如,房价),而求解向量$x$则能得到我们模型的参数。神经网络: 神经网络是一系列相互连接的层。数据从一层传递到下一层的过程涉及矩阵与向量的乘法,这充当线性变换,随后是一个“激活函数”。训练神经网络的全部就是为这些矩阵找到合适的数字。主成分分析(PCA): 这种常用的降维技术找出数据中最主要的“方向”。这些方向就是数据协方差矩阵的特征向量,一个我们将在第五章中讨论的核心内容。下图展示了原始数据如何转换成数字格式,以便机器学习算法在线性代数支持下进行预测。digraph G { rankdir=TB; splines=ortho; nodesep=0.8; ranksep=1; node [shape=box, style="rounded,filled", fontname="Arial", margin="0.3,0.2"]; edge [fontname="Arial"]; "原始数据" [fillcolor="#a5d8ff"]; "特征向量" [fillcolor="#96f2d7"]; "数据矩阵" [fillcolor="#96f2d7"]; "机器学习算法" [fillcolor="#d0bfff"]; "预测" [fillcolor="#ffc9c9"]; "原始数据" -> "特征向量" [label="组织\n信息"]; "特征向量" -> "数据矩阵" [label="堆叠样本"]; "数据矩阵" -> "机器学习算法" [label="模型输入\n(例如,求解 Ax=b)"]; "机器学习算法" -> "预测"; }原始信息被转换成特征向量,随后汇集到数据矩阵中。机器学习算法使用线性代数对该矩阵进行运算,并生成最终输出或预测。总而言之,学习线性代数并非可有可无的学术练习。它是你理解如何表示数据、算法的底层运行方式以及如何高效实现它们所需的实用工具集。在接下来的章节中,我们将从最基本的部分开始构建这个工具集,从最简单的对象:标量、向量和矩阵开始。