📅  最后修改于: 2023-12-03 14:44:19.453000             🧑  作者: Mango
线性代数是机器学习领域中最基础也是最重要的数学分支之一。在机器学习中,线性代数用于解决很多问题,例如:矩阵分解、矩阵运算、线性回归、主成分分析等等。因此,学习线性代数对每个程序员来说都是非常重要的!
矩阵是线性代数中非常重要的结构,大部分机器学习算法都涉及到矩阵运算。以下是常用的矩阵运算:
两个矩阵相加,对应位置的元素相加,得到的矩阵维度与原矩阵相同。
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = A + B
print(C)
输出:
array([[ 6, 8],
[10, 12]])
两个矩阵相乘,第一个矩阵的每一行与第二个矩阵的每一列进行点乘,得到的矩阵维度为第一个矩阵的行数与第二个矩阵的列数。
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = np.dot(A, B)
print(C)
输出:
array([[19, 22],
[43, 50]])
矩阵转置是将矩阵的行列互换,得到一个新的矩阵。
A = np.array([[1, 2], [3, 4]])
B = A.T
print(B)
输出:
array([[1, 3],
[2, 4]])
向量是线性代数中另外一个很重要的结构,机器学习中也会频繁使用。
两个向量的点积,也叫数量积,是两个向量对应元素相乘的和。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.dot(a, b)
print(c)
输出:
32
向量的范数是衡量向量大小的一种方式。
a = np.array([1, 2, 3])
l1_norm = np.linalg.norm(a, ord=1) # L1 范数
l2_norm = np.linalg.norm(a, ord=2) # L2 范数
print(f"L1 范数: {l1_norm}")
print(f"L2 范数: {l2_norm}")
输出:
L1 范数: 6
L2 范数: 3.7416573867739413
矩阵分解在机器学习领域中被广泛应用,例如在推荐系统中,矩阵分解可以将用户和物品映射到潜在的低维空间中,从而方便进行推荐。
奇异值分解是一种将一个矩阵分解成三个矩阵的方法,例如 $A$ 可以被分解为 $U\Sigma V^T$。
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
U, S, VT = np.linalg.svd(A)
print(f"U: {U}")
print(f"S: {S}")
print(f"VT: {VT}")
输出:
U: [[-0.21483724 0.88723069 -0.40824829]
[-0.52058739 0.24964395 0.81649658]
[-0.82633754 -0.3879428 -0.40824829]]
S: [1.68481034e+01 1.06836951e+00 3.33475287e-16]
VT: [[-0.47967194 -0.57236779 -0.66506363]
[-0.77669099 -0.07568654 0.62531791]
[ 0.40824829 -0.81649658 0.40824829]]
线性回归是机器学习中最经典的算法之一,它通过找到最佳拟合直线或超平面来预测连续的输出。
最小二乘法是一种用于估计线性回归系数的方法,它通过最小化残差平方和来达到最优拟合效果。
import matplotlib.pyplot as plt
# 生成随机数据
x = np.linspace(0, 10, 100)
y = 2 * x + 1 + np.random.randn(100)
# 构建设计矩阵
X = np.vstack([x, np.ones(len(x))]).T
# 最小二乘法求解
w, b = np.linalg.lstsq(X, y, rcond=None)[0]
# 绘制图像
plt.scatter(x, y, color='blue')
plt.plot(x, w * x + b, color='red')
plt.show()
输出:
主成分分析是一种常用的无监督学习方法,它可以将高维数据转化为低维数据,从而减少计算量,并发掘数据中的多个特征。
PCA 可以通过将高维数据投影到低维空间上来实现降维。
import matplotlib.pyplot as plt
# 生成随机数据
x = np.linspace(0, 10, 100)
y = 2 * x + 1 + np.random.randn(100)
X = np.vstack([x, y]).T
# 执行 PCA
pca = np.linalg.eig(X.T @ X)
# 取前两个特征
W = pca[1][:, :2]
# 投影到新空间
X_new = X @ W
# 绘制图像
plt.scatter(X_new[:, 0], X_new[:, 1], color='blue')
plt.show()
输出:
以上就是 ML | 线性代数运算的介绍,希望大家通过本文能够理解线性代数的基本概念,并学会如何在 Python 中实现常用的线性代数运算和算法。