机器学习精要:线性代数中的矩阵运算详解

机器学习精要:线性代数中的矩阵运算详解

machine_learning_refined Notes, examples, and Python demos for the 2nd edition of the textbook "Machine Learning Refined" (published by Cambridge University Press). machine_learning_refined 项目地址: https://gitcode.com/gh_mirrors/ma/machine_learning_refined

矩阵基础概念

矩阵是线性代数中的核心概念之一,它是由一组数字按照矩形排列而成的数学对象。在机器学习中,矩阵被广泛用于表示数据集、权重参数和各种变换操作。

矩阵的定义

矩阵可以看作是由多个行向量垂直堆叠而成的结构。给定P个1×N的行向量:

$$ \mathbf{x}{1}=\left[\begin{array}{cccc} x{11} & x_{12} & \cdots & x_{1N}\end{array}\right] \ \mathbf{x}{2}=\left[\begin{array}{cccc} x{21} & x_{22} & \cdots & x_{2N}\end{array}\right] \ \vdots \ \mathbf{x}{P}=\left[\begin{array}{cccc} x{P1} & x_{P2} & \cdots & x_{PN}\end{array}\right] $$

将它们堆叠起来就形成一个P×N的矩阵:

$$ \mathbf{X}= \begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1N}\ x_{21} & x_{22} & \cdots & x_{2N}\ \vdots & \vdots & \ddots & \vdots\ x_{P1} & x_{P2} & \cdots & x_{PN} \end{bmatrix} $$

其中P表示行数,N表示列数。在机器学习中,矩阵通常用大写粗体字母表示,如X、W等。

矩阵的转置

矩阵的转置是将矩阵的行列互换的操作,记作Xᵀ。对于一个P×N的矩阵X,其转置Xᵀ是一个N×P的矩阵:

$$ \mathbf{X} ^T= \begin{bmatrix} x_{11} & x_{21} & \cdots & x_{P1}\ x_{12} & x_{22} & \cdots & x_{P2}\ \vdots & \vdots & \ddots & \vdots\ x_{1N} & x_{2N} & \cdots & x_{PN} \end{bmatrix} $$

在实际编程中,可以使用NumPy的.T属性来实现矩阵转置:

import numpy as np

X = np.array([[1,3,1],[2,5,1]])
print("原矩阵:\n", X)
print("转置矩阵:\n", X.T)

矩阵的基本运算

矩阵加减法

矩阵加减法是按元素进行的,要求两个矩阵的维度必须相同。对于两个P×N的矩阵X和Y:

$$ \mathbf{X}+\mathbf{Y}=\begin{bmatrix} x_{11}+y_{11} & x_{12}+y_{12} & \cdots & x_{1N}+y_{1N}\ x_{21}+y_{21} & x_{22}+y_{22} & \cdots & x_{2N}+y_{2N}\ \vdots & \vdots & \ddots & \vdots\ x_{P1}+y_{P1} & x_{P2}+y_{P2} & \cdots & x_{PN}+y_{PN} \end{bmatrix} $$

NumPy中的实现非常简单:

X = np.array([[1,3,1],[2,5,1]])
Y = np.array([[5,9,14],[1,2,1]])
print("矩阵相加:\n", X + Y)

矩阵的标量乘法

矩阵可以与标量相乘,结果是矩阵的每个元素都乘以该标量:

$$ c\times\mathbf{X}=\begin{bmatrix} c\times x_{11} & c\times x_{12} & \cdots & c\times x_{1N}\ c\times x_{21} & c\times x_{22} & \cdots & c\times x_{2N}\ \vdots & \vdots & \ddots & \vdots\ c\times x_{P1} & c\times x_{P2} & \cdots & c\times x_{PN} \end{bmatrix} $$

NumPy实现:

c = 2
print("矩阵标量乘法:\n", c * X)

矩阵与向量的乘法

矩阵与向量的乘法在机器学习中非常常见,例如神经网络中的前向传播就是典型的矩阵向量乘法。

左乘(行向量乘法)

当一个1×P的行向量a左乘一个P×N的矩阵X时,结果是1×N的行向量b:

$$ \mathbf{a}\mathbf{X} = \mathbf{b} = \begin{bmatrix} \sum_{p=1}^P a_px_{p1} ,,,,,, \sum_{p=1}^P a_px_{p2} ,,,,,, \cdots ,,,,,, \sum_{p=1}^P a_px_{pN} \end{bmatrix} $$

这实际上是向量a与矩阵X的每一列做内积。

右乘(列向量乘法)

当一个N×1的列向量a右乘一个P×N的矩阵X时,结果是P×1的列向量b:

$$ \mathbf{X}\mathbf{a} = \mathbf{b} = \begin{bmatrix} \sum_{n=1}^N a_nx_{1n} \ \sum_{n=1}^N a_nx_{2n} \ \vdots \ \sum_{n=1}^N a_nx_{Pn} \end{bmatrix} $$

这实际上是矩阵X的每一行与向量a做内积。

在NumPy中,这两种乘法都可以使用dot函数实现:

# 左乘示例
a = np.array([1,1]).reshape(1,2)
print("左乘结果:\n", np.dot(a, X))

# 右乘示例
a = np.array([1,1,1]).reshape(3,1)
print("右乘结果:\n", np.dot(X, a))

矩阵与矩阵的乘法

元素级乘法

元素级乘法(Hadamard积)要求两个矩阵维度相同,是对应元素相乘:

$$ \mathbf{X}\times \mathbf{Y}=\begin{bmatrix} x_{11}\times y_{11} & x_{12}\times y_{12} & \cdots & x_{1N}\times y_{1N}\ x_{21}\times y_{21} & x_{22}\times y_{22} & \cdots & x_{2N}\times y_{2N}\ \vdots & \vdots & \ddots & \vdots\ x_{P1}\times y_{P1} & x_{P2}\times y_{P2} & \cdots & x_{PN}\times y_{PN} \end{bmatrix} $$

NumPy中使用*运算符实现:

print("元素级乘法:\n", X * Y)

矩阵乘法

矩阵乘法是线性代数中最重要的运算之一。对于P×N的矩阵X和N×Q的矩阵Y,它们的乘积XY是一个P×Q的矩阵,其(p,q)位置的元素是X的第p行与Y的第q列的内积:

$$ \left(\mathbf{XY}\right){p,q}= \mathbf{x}{p}^{T}\mathbf{y}_{q} $$

矩阵乘法也可以表示为外积的和:

$$ \mathbf{XY}= \sum_{n=1}^N \mathbf{x}{n}\mathbf{y}{n}^{T} $$

其中xₙ是X的第n列,yₙᵀ是Y的第n行。

在NumPy中使用dot函数实现矩阵乘法:

Y = np.array([[5,1],[9,2],[14,1]])
print("矩阵乘法:\n", np.dot(X, Y))

矩阵运算在机器学习中的应用

矩阵运算在机器学习中无处不在:

  1. 线性回归:参数估计涉及矩阵乘法
  2. 神经网络:每一层的计算都是矩阵乘法加上非线性变换
  3. 主成分分析(PCA):基于特征分解的降维方法
  4. 推荐系统:矩阵分解技术

理解矩阵运算对于掌握机器学习算法至关重要。通过本文介绍的基本运算,读者可以更好地理解后续更复杂的线性代数概念和机器学习算法。

machine_learning_refined Notes, examples, and Python demos for the 2nd edition of the textbook "Machine Learning Refined" (published by Cambridge University Press). machine_learning_refined 项目地址: https://gitcode.com/gh_mirrors/ma/machine_learning_refined

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏纯漫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值