线性代数在机器学习中的应用初探

引言

机器学习的核心是通过数据构建数学模型来解决预测、分类和聚类等问题,而线性代数作为基础数学工具,贯穿了从数据表示到模型训练的全流程。无论是简单的线性回归,还是复杂的神经网络权重计算,都离不开矩阵、向量和线性变换的支撑。正如机器学习领域的经典观点:

如果你想真正理解机器学习算法的底层逻辑,而不只是调参,那么扎实的线性代数基础是必不可少的。—— 《深度学习》作者Ian Goodfellow
# 定义函数:计算斐波那契数列前n项
def fibonacci(n):
    # 处理边界情况:n小于等于0返回空列表,n=1返回[0],n=2返回[0,1]
    if n <= 0:
        return []
    elif n == 1:
        return [0]
    elif n == 2:
        return [0, 1]
    
    # 初始化斐波那契数列列表
    fib_list = [0, 1]
    # 从第3项开始循环计算(索引从2开始)
    for i in range(2, n):
        # 下一项 = 前两项之和
        next_num = fib_list[i-1] + fib_list[i-2]
        fib_list.append(next_num)
    
    return fib_list

# 调用函数,计算前10项
result = fibonacci(10)
# 打印结果
print("斐波那契数列前10项:", result)

123

// 定义函数:格式化当前时间
function formatCurrentTime() {
    // 获取当前时间对象
    const now = new Date();
    
    // 提取年、月、日(月份从0开始,需+1)
    const year = now.getFullYear();
    const month = String(now.getMonth() + 1).padStart(2, '0'); // 补零,确保两位数
    const day = String(now.getDate()).padStart(2, '0');
    
    // 提取时、分、秒
    const hour = String(now.getHours()).padStart(2, '0');
    const minute = String(now.getMinutes()).padStart(2, '0');
    const second = String(now.getSeconds()).padStart(2, '0');
    
    // 拼接成指定格式
    const formattedTime = `${year}-${month}-${day} ${hour}:${minute}:${second}`;
    return formattedTime;
}

// 调用函数并打印结果
const currentTime = formatCurrentTime();
console.log("当前格式化时间:", currentTime);
引用文字123

核心概念与数学表达

1. 数据的矩阵表示

在机器学习中,数据集通常被表示为矩阵形式。假设我们有$m$个样本,每个样本包含$n$个特征,那么数据集可以表示为$m \times n$的矩阵$\mathbf{X}$:

$$ \mathbf{X} = \begin{bmatrix} x_{11} & x_{12} & \dots & x_{1n} \\ x_{21} & x_{22} & \dots & x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m1} & x_{m2} & \dots & x_{mn} \end{bmatrix} $$

其中,行向量$\mathbf{x}_i = [x_{i1}, x_{i2}, \dots, x_{in}]$代表第$i$个样本,列向量$\mathbf{x}_j = [x_{1j}, x_{2j}, \dots, x_{mj}]^T$代表第$j$个特征的所有样本值。

2. 线性回归的核心公式

线性回归的目标是找到最优的权重向量$\mathbf{w}$和偏置$b$,使得预测值$\hat{y}_i = \mathbf{w}^T\mathbf{x}_i + b$尽可能接近真实值$y_i$。其损失函数(均方误差)的行内表达式为$L(\mathbf{w}, b) = \frac{1}{m}\sum_{i=1}^m (\hat{y}_i - y_i)^2$,通过最小二乘法求解可得闭式解:

$$ \mathbf{w}^* = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y} $$

这个公式揭示了线性回归的本质——通过矩阵运算直接求解最优权重,无需迭代优化(前提是$\mathbf{X}^T\mathbf{X}$可逆)。

实践与拓展

理解线性代数在机器学习中的应用,不仅需要理论推导,更需要结合实际代码实现。你可以参考Scikit-learn官方文档中的线性回归示例(链接),通过代码验证上述公式的计算结果。

下图展示了线性回归拟合二维数据的效果,直观体现了线性模型对数据的拟合能力:

线性回归拟合示例
图1:线性回归拟合随机生成的二维数据,蓝色点为原始数据,红色线为拟合直线

需要注意的是,当特征维度$n$远大于样本数$m$时,$\mathbf{X}^T\mathbf{X}$可能不可逆,此时需要引入正则化(如L1/L2正则),对应的损失函数变为$L(\mathbf{w}, b) = \frac{1}{m}\sum_{i=1}^m (\hat{y}_i - y_i)^2 + \lambda\|\mathbf{w}\|_2^2$(L2正则,即Ridge回归),其中$\lambda$为正则化系数,用于控制权重的大小,避免过拟合。

总结

线性代数为机器学习提供了统一的数学语言,从数据表示到模型求解,矩阵和向量运算简化了复杂的计算逻辑。掌握行内公式(如$y = \mathbf{w}^T\mathbf{x} + b$)和块级公式(如最小二乘闭式解)的读写,是理解算法原理的关键。

参考文献

[1] Goodfellow I, Bengio Y, Courville A. Deep Learning[M]. MIT Press, 2016.
[2] Strang G. Introduction to Linear Algebra[M]. 5th ed. Wellesley-Cambridge Press, 2016.
[3] 李航. 统计学习方法[M]. 第2版. 清华大学出版社, 2019.
[4] Scikit-learn官方文档. Linear Regression: https://scikit-learn.org/stable/modules/linear_model.html

标签: none

仅有一条评论

  1. 测试 $\pi=\sqrt{g}$

添加新评论