📜  ML |线性代数运算(1)

📅  最后修改于: 2023-12-03 14:44:19.453000             🧑  作者: Mango

ML | 线性代数运算

线性代数是机器学习领域中最基础也是最重要的数学分支之一。在机器学习中,线性代数用于解决很多问题,例如:矩阵分解、矩阵运算、线性回归、主成分分析等等。因此,学习线性代数对每个程序员来说都是非常重要的!

矩阵运算

矩阵是线性代数中非常重要的结构,大部分机器学习算法都涉及到矩阵运算。以下是常用的矩阵运算:

矩阵加法

两个矩阵相加,对应位置的元素相加,得到的矩阵维度与原矩阵相同。

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
矩阵分解

矩阵分解在机器学习领域中被广泛应用,例如在推荐系统中,矩阵分解可以将用户和物品映射到潜在的低维空间中,从而方便进行推荐。

奇异值分解(SVD)

奇异值分解是一种将一个矩阵分解成三个矩阵的方法,例如 $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()

输出:

linear_regression.png

主成分分析(PCA)

主成分分析是一种常用的无监督学习方法,它可以将高维数据转化为低维数据,从而减少计算量,并发掘数据中的多个特征。

PCA 降维

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()

输出:

pca.png

以上就是 ML | 线性代数运算的介绍,希望大家通过本文能够理解线性代数的基本概念,并学会如何在 Python 中实现常用的线性代数运算和算法。