网站建设标志设计,网站推广优化招聘,中国建设网官网登录入口,辽宁建设工程信息网官方网站文章目录 线性代数入门#xff1a;机器学习零基础小白指南前言一、向量#xff1a;数据的基本单元1.1 什么是向量#xff1f;1.1.1 举个例子#xff1a; 1.2 向量的表示与维度1.2.1 向量的维度1.2.2 向量的表示方法 1.3 向量的基本运算1.3.1 向量加法1.3.2 向量的数乘1.3.3… 文章目录 线性代数入门机器学习零基础小白指南前言一、向量数据的基本单元1.1 什么是向量1.1.1 举个例子 1.2 向量的表示与维度1.2.1 向量的维度1.2.2 向量的表示方法 1.3 向量的基本运算1.3.1 向量加法1.3.2 向量的数乘1.3.3 向量的长度范数 1.4 向量的几何意义 二、矩阵多维数据的集合2.1 什么是矩阵2.1.1 举个例子 2.2 矩阵的表示与维度2.2.1 矩阵的表示2.2.2 矩阵的维度 2.3 矩阵的基本运算2.3.1 矩阵加法2.3.2 矩阵数乘2.3.3 矩阵乘法2.3.4 转置矩阵 三、矩阵的高级操作3.1 矩阵的逆3.1.1 什么是逆矩阵3.1.2 矩阵可逆的条件3.1.3 逆矩阵的计算 3.2 特征值与特征向量3.2.1 什么是特征值和特征向量3.2.2 几何意义3.2.3 计算特征值和特征向量 3.3 奇异值分解SVD3.3.1 什么是奇异值分解3.3.2 SVD的用途 3.4 矩阵的伪逆3.4.1 什么是伪逆3.4.2 伪逆的计算方法 四、矩阵在机器学习中的应用4.1 数据表示4.2 模型训练中的矩阵运算4.2.1 线性回归 写在最后 线性代数入门机器学习零基础小白指南 欢迎讨论如果你在阅读过程中对某些公式或内容有疑问欢迎在评论区留言大家一起交流进步 点赞、收藏与分享觉得这篇文章对你有帮助吗记得点赞收藏并分享给对机器学习感兴趣的朋友吧你们的支持是我创作的最大动力 知识的启航线性代数是机器学习的基础也是未来探索智能模型的关键。让我们从这里开始一步步搭建知识大厦 前言
在正式踏入机器学习的实战领域前我们需要为自己筑起一座坚实的数学地基。 对于零基础的学习者而言数学听起来也许陌生甚至有点“吓人”。然而不必惧怕本篇文章将带你从最直观的概念出发帮助你理解和掌握线性代数这门支撑机器学习大厦的重要支柱。
为什么选择线性代数作为第一站
数据表示机器学习中的数据常以矩阵和向量的形式表示线性代数是理解这种数据结构的语言。模型构建许多经典模型如线性回归和高级算法如神经网络中的参数更新都依赖矩阵运算和向量运算的思想。特征变换降维、特征提取、特征工程等处理步骤都离不开对线性代数的理解。 本篇文章将采用从浅入深的方式带你从最基本的概念向量与矩阵出发逐步触及更深层的运算与应用。你不需要担心自己的数学基础薄弱每一个概念都会配以直观解释、示例和适合初学者的类比。通过本篇的学习你将在脑海中构建起对数据表示和线性结构的基础认知为后续的学习奠定牢固根基。 一、向量数据的基本单元
1.1 什么是向量
向量Vector是线性代数的核心概念之一。简单来说向量是一组有序数值的集合可以用来表示一个物理量或者一个对象的特征。
1.1.1 举个例子
假设我们想描述一个人的体型可以用以下信息
身高170 厘米体重65 公斤年龄30 岁
我们可以把这些特征组合成一个向量 v [ 170 65 30 ] \mathbf{v} \begin{bmatrix} 170 \\ 65 \\ 30 \end{bmatrix} v 1706530 1.2 向量的表示与维度
1.2.1 向量的维度
向量的维度Dimension是其元素的个数。例如 v [ 170 65 30 ] \mathbf{v} \begin{bmatrix} 170 \\ 65 \\ 30 \end{bmatrix} v 1706530 是一个三维向量。 w [ 1 2 ] \mathbf{w} \begin{bmatrix} 1 \\ 2 \end{bmatrix} w[12] 是一个二维向量。
1.2.2 向量的表示方法 数学表示用列向量或行向量表示例如 列向量 v [ v 1 v 2 v 3 ] \mathbf{v} \begin{bmatrix} v_1 \\ v_2 \\ v_3 \end{bmatrix} v v1v2v3 行向量 v [ v 1 v 2 v 3 ] \mathbf{v} \begin{bmatrix} v_1 v_2 v_3 \end{bmatrix} v[v1v2v3] 编程实现以 Python 为例 import numpy as np# 创建列向量
v np.array([[170], [65], [30]])
print(v)# 创建行向量
w np.array([1, 2, 3])
print(w)1.3 向量的基本运算
向量运算是线性代数的基础在机器学习中用于描述数据间的关系。
1.3.1 向量加法
两个维度相同的向量可以逐元素相加。例如 a [ 1 2 ] , b [ 3 4 ] \mathbf{a} \begin{bmatrix} 1 \\ 2 \end{bmatrix}, \quad \mathbf{b} \begin{bmatrix} 3 \\ 4 \end{bmatrix} a[12],b[34] 它们的加法结果为 a b [ 1 3 2 4 ] [ 4 6 ] \mathbf{a} \mathbf{b} \begin{bmatrix} 13 \\ 24 \end{bmatrix} \begin{bmatrix} 4 \\ 6 \end{bmatrix} ab[1324][46]
Python代码
import numpy as npa np.array([1, 2])
b np.array([3, 4])
print(a b) # 输出[4 6]1.3.2 向量的数乘
标量 (c) 与向量 v \mathbf{v} v 的乘积是将 (c) 逐一乘以向量中的每个元素 c v [ c ⋅ v 1 c ⋅ v 2 ] c \mathbf{v} \begin{bmatrix} c \cdot v_1 \\ c \cdot v_2 \end{bmatrix} cv[c⋅v1c⋅v2]
例如 2 ⋅ [ 3 4 ] [ 6 8 ] 2 \cdot \begin{bmatrix} 3 \\ 4 \end{bmatrix} \begin{bmatrix} 6 \\ 8 \end{bmatrix} 2⋅[34][68]
Python代码
v np.array([3, 4])
c 2
print(c * v) # 输出[6 8]1.3.3 向量的长度范数
向量的长度也称范数Norm定义为 ∥ v ∥ v 1 2 v 2 2 ⋯ v n 2 \|\mathbf{v}\| \sqrt{v_1^2 v_2^2 \cdots v_n^2} ∥v∥v12v22⋯vn2
示例 若 v [ 3 4 ] \mathbf{v} \begin{bmatrix} 3 \\ 4 \end{bmatrix} v[34]则 ∥ v ∥ 3 2 4 2 5 \|\mathbf{v}\| \sqrt{3^2 4^2} 5 ∥v∥3242 5
Python代码
from numpy.linalg import normv np.array([3, 4])
print(norm(v)) # 输出5.01.4 向量的几何意义
向量可以用来描述“方向”和“大小”。例如
向量 v [ 3 4 ] \mathbf{v} \begin{bmatrix} 3 \\ 4 \end{bmatrix} v[34] 指向二维平面中的点 ((3,4))其长度为 5。 二、矩阵多维数据的集合
2.1 什么是矩阵
矩阵Matrix是一个二维数组由行Row和列Column组成。矩阵在机器学习中非常重要用于表示数据集、模型参数和特征变换。
2.1.1 举个例子
假设我们有一个房价预测的数据集包括以下信息
面积(平方米)房龄(年)房价(万元)505100100102001508300
可以将这个数据用矩阵表示 特征矩阵 (X) X [ 50 5 100 10 150 8 ] X \begin{bmatrix} 50 5 \\ 100 10 \\ 150 8 \end{bmatrix} X 501001505108 目标向量 (y) y [ 100 200 300 ] y \begin{bmatrix} 100 \\ 200 \\ 300 \end{bmatrix} y 100200300 2.2 矩阵的表示与维度
2.2.1 矩阵的表示
矩阵通常用大写字母如 (A), (X)表示矩阵中的元素可以用行列索引 (A_{ij}) 表示例如 A [ 1 2 3 4 5 6 ] A \begin{bmatrix} 1 2 3 \\ 4 5 6 \end{bmatrix} A[142536] A 11 1 A_{11} 1 A111 表示第一行第一列的元素。 A 23 6 A_{23} 6 A236 表示第二行第三列的元素。
2.2.2 矩阵的维度
矩阵的维度用“行数 × 列数”表示例如
上述矩阵 (A) 的维度是 2 × 3 2 \times 3 2×32 行 3 列。如果一个矩阵的行数和列数相同则称其为方阵。
Python代码实现
import numpy as np# 创建矩阵
A np.array([[1, 2, 3],[4, 5, 6]])
print(矩阵 A:\n, A)
print(A 的形状:, A.shape) # 输出 (2, 3)2.3 矩阵的基本运算
2.3.1 矩阵加法
两个矩阵相加要求维度相同逐元素相加。例如 [ 1 2 3 4 ] [ 5 6 7 8 ] [ 6 8 10 12 ] \begin{bmatrix} 1 2 \\ 3 4 \end{bmatrix} \begin{bmatrix} 5 6 \\ 7 8 \end{bmatrix} \begin{bmatrix} 6 8 \\ 10 12 \end{bmatrix} [1324][5768][610812]
Python代码
A np.array([[1, 2],[3, 4]])
B np.array([[5, 6],[7, 8]])
print(A B) # 输出 [[6, 8], [10, 12]]2.3.2 矩阵数乘
标量普通数值与矩阵相乘是将标量逐元素乘以矩阵中的每个元素。例如 2 ⋅ [ 1 2 3 4 ] [ 2 4 6 8 ] 2 \cdot \begin{bmatrix} 1 2 \\ 3 4 \end{bmatrix} \begin{bmatrix} 2 4 \\ 6 8 \end{bmatrix} 2⋅[1324][2648]
Python代码
A np.array([[1, 2],[3, 4]])
print(2 * A) # 输出 [[2, 4], [6, 8]]2.3.3 矩阵乘法
矩阵乘法是矩阵运算中最常见的操作用于特征变换和模型训练。
规则
如果 A A A 是 m × n m \times n m×n 的矩阵 B B B 是 n × p n \times p n×p 的矩阵则它们的乘积 C A B C AB CAB 是 m × p m \times p m×p 的矩阵。元素 C i j C_{ij} Cij 的计算公式为 C i j ∑ k 1 n A i k B k j C_{ij} \sum_{k1}^n A_{ik} B_{kj} Cijk1∑nAikBkj
示例 A [ 1 2 3 4 ] , B [ 5 6 7 8 ] A \begin{bmatrix} 1 2 \\ 3 4 \end{bmatrix}, \quad B \begin{bmatrix} 5 6 \\ 7 8 \end{bmatrix} A[1324],B[5768]
矩阵乘积 C A ⋅ B [ 19 22 43 50 ] C A \cdot B \begin{bmatrix} 19 22 \\ 43 50 \end{bmatrix} CA⋅B[19432250]
Python代码
A np.array([[1, 2],[3, 4]])
B np.array([[5, 6],[7, 8]])
C A.dot(B) # 或使用 np.matmul(A, B)
print(C) # 输出 [[19, 22], [43, 50]]2.3.4 转置矩阵
矩阵的转置是将其行列互换。例如 A [ 1 2 3 4 5 6 ] A \begin{bmatrix} 1 2 3 \\ 4 5 6 \end{bmatrix} A[142536] 其转置为 A T [ 1 4 2 5 3 6 ] A^T \begin{bmatrix} 1 4 \\ 2 5 \\ 3 6 \end{bmatrix} AT 123456
Python代码
A np.array([[1, 2, 3],[4, 5, 6]])
print(A.T) # 输出 [[1, 4], [2, 5], [3, 6]]三、矩阵的高级操作 矩阵的高级操作是线性代数的重要内容也是机器学习中不可或缺的数学工具。在这一部分我们将学习矩阵的逆、特征值、特征向量以及矩阵分解等内容并结合实际应用来理解它们的意义。 3.1 矩阵的逆
3.1.1 什么是逆矩阵
对于一个方阵 (A)如果存在一个矩阵 A − 1 A^{-1} A−1使得 A ⋅ A − 1 A − 1 ⋅ A I A \cdot A^{-1} A^{-1} \cdot A I A⋅A−1A−1⋅AI 其中 I I I 是单位矩阵对角线元素为 1其他为 0 的矩阵则称 A − 1 A^{-1} A−1 是 A A A 的逆矩阵。
3.1.2 矩阵可逆的条件
只有方阵行数等于列数可能有逆矩阵。如果矩阵的行列式Determinant为 0则该矩阵不可逆奇异矩阵。
3.1.3 逆矩阵的计算
对于 2 × 2 2 \times 2 2×2 的矩阵 A [ a b c d ] A \begin{bmatrix} a b \\ c d \end{bmatrix} A[acbd]其逆矩阵为 A − 1 1 a d − b c [ d − b − c a ] A^{-1} \frac{1}{ad - bc} \begin{bmatrix} d -b \\ -c a \end{bmatrix} A−1ad−bc1[d−c−ba]
例如 A [ 4 7 2 6 ] A \begin{bmatrix} 4 7 \\ 2 6 \end{bmatrix} A[4276] 行列式 a d − b c 4 ⋅ 6 − 7 ⋅ 2 10 ad - bc 4 \cdot 6 - 7 \cdot 2 10 ad−bc4⋅6−7⋅210
因此 A − 1 1 10 [ 6 − 7 − 2 4 ] [ 0.6 − 0.7 − 0.2 0.4 ] A^{-1} \frac{1}{10} \begin{bmatrix} 6 -7 \\ -2 4 \end{bmatrix} \begin{bmatrix} 0.6 -0.7 \\ -0.2 0.4 \end{bmatrix} A−1101[6−2−74][0.6−0.2−0.70.4]
Python代码
import numpy as np# 定义矩阵
A np.array([[4, 7],[2, 6]])# 计算逆矩阵
A_inv np.linalg.inv(A)
print(逆矩阵:\n, A_inv)3.2 特征值与特征向量
3.2.1 什么是特征值和特征向量
对于一个方阵 A A A如果存在一个标量 λ \lambda λ 和一个非零向量 v \mathbf{v} v使得 A v λ v A \mathbf{v} \lambda \mathbf{v} Avλv 则称 λ \lambda λ 为矩阵 A A A 的特征值。 v \mathbf{v} v 为对应的特征向量。
3.2.2 几何意义
特征向量是一个方向在矩阵变换下保持方向不变特征值是对应的缩放因子。
3.2.3 计算特征值和特征向量
特征值通过解以下特征方程获得 det ( A − λ I ) 0 \det(A - \lambda I) 0 det(A−λI)0 解得的 λ \lambda λ 为特征值将特征值代入方程 ( A − λ I ) v 0 (A - \lambda I)\mathbf{v} 0 (A−λI)v0 可解得特征向量。
Python代码
from numpy.linalg import eig# 定义矩阵
A np.array([[4, 1],[2, 3]])# 计算特征值和特征向量
values, vectors eig(A)
print(特征值:\n, values)
print(特征向量:\n, vectors)3.3 奇异值分解SVD
3.3.1 什么是奇异值分解
奇异值分解Singular Value Decomposition, SVD是对矩阵的一种分解方法可以表示为 A U Σ V T A U \Sigma V^T AUΣVT
3.3.2 SVD的用途
数据降维通过保留主要的奇异值可以减少数据维度如 PCA。数据压缩SVD可用于压缩图片或文本数据。推荐系统通过矩阵分解预测用户评分。
Python代码
from numpy.linalg import svd# 定义矩阵
A np.array([[1, 2],[3, 4],[5, 6]])# 奇异值分解
U, Sigma, VT svd(A)
print(U 矩阵:\n, U)
print(奇异值:\n, Sigma)
print(V 转置:\n, VT)3.4 矩阵的伪逆
3.4.1 什么是伪逆
伪逆矩阵Pseudo-Inverse是逆矩阵的推广用于处理非方阵或奇异矩阵。对于一个矩阵 A A A伪逆记为 A A^ A。
3.4.2 伪逆的计算方法
伪逆可以通过 SVD 计算 A V Σ U T A^ V \Sigma^ U^T AVΣUT 其中 Σ \Sigma^ Σ 是对奇异值矩阵的伪逆。
Python代码
# 定义矩阵
A np.array([[1, 2],[3, 4],[5, 6]])# 计算伪逆
A_pinv np.linalg.pinv(A)
print(伪逆矩阵:\n, A_pinv)四、矩阵在机器学习中的应用
4.1 数据表示
特征矩阵存储样本的特征数据每一行表示一个样本每一列表示一个特征。目标向量存储样本对应的目标值。
4.2 模型训练中的矩阵运算
4.2.1 线性回归
在线性回归中我们希望找到参数向量 θ \theta θ使得 y X θ y X\theta yXθ 通过最小化误差 min θ ∥ X θ − y ∥ 2 \min_\theta \|X\theta - y\|^2 θmin∥Xθ−y∥2 可以使用正规方程求解 θ ( X T X ) − 1 X T y \theta (X^T X)^{-1} X^T y θ(XTX)−1XTy
Python代码
# 定义特征矩阵 X 和目标向量 y
X np.array([[1, 50],[1, 100],[1, 150]])
y np.array([100, 200, 300])# 计算参数向量 theta
theta np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print(参数向量 theta:, theta)写在最后 通过这篇文章的学习你初步了解了向量和矩阵这些基础概念以及它们在机器学习中的重要性。从简单的向量加减和数乘到稍微复杂的矩阵运算再到特征值、奇异值分解等高级知识点这些都是构建更高级模型和理解算法原理的关键砖瓦。 你或许会发现这些数学内容并不是遥不可及的高门槛相反它们能帮助你更直观地理解数据与模型之间的关系。接下来你可以尝试把这里学到的知识灵活运用到一些简单数据分析或小项目中比如实现一个最基础的线性回归预测或者对一个数据集进行简单的降维操作。 在后续的学习中我们还会介绍更多与机器学习相关的数学和编程技巧。希望这篇文章能成为你打牢数学基础的起点让你在机器学习这片广阔的领域中更有方向感和掌控力。加油 以上就是关于【机器学习】窥数据之序悟算法之道机器学习的初心与远方的内容啦各位大佬有什么问题欢迎在评论区指正或者私信我也是可以的啦您的支持是我创作的最大动力❤️