AI应用开发之特征值与SVD分解详解

news2026/5/8 21:41:12
摘要特征值与奇异值分解SVD是线性代数在人工智能领域最为核心的数学工具之一。本文系统讲解特征值与特征向量的定义、几何意义及求解方法进一步延伸到特征分解、SVD分解的原理与实现最后重点阐述其在主成分分析PCA、推荐系统、图像压缩、语义分析等AI典型场景中的应用。通过完整的NumPy代码示例帮助读者从理论到实践全面掌握这些重要的矩阵分解技术。关键词特征值分解奇异值分解SVDPCA主成分分析矩阵分解NumPy一、特征值与特征向量线性变换的本质1.1 定义设 $A$ 为一个 $n \times n$ 的方阵如果存在非零向量 $\mathbf{x}$ 和标量 $\lambda$满足$$A\mathbf{x} \lambda \mathbf{x}$$则称 $\lambda$ 为矩阵 $A$ 的特征值eigenvalue$\mathbf{x}$ 为对应于 $\lambda$ 的特征向量eigenvector。这个式子的几何含义是向量 $\mathbf{x}$ 经过矩阵 $A$ 变换后方向不变仍在同一直线上只发生了伸缩变换伸缩比例即为特征值 $\lambda$。1.2 几何意义特征向量的几何意义极为直观它是矩阵 $A$ 作用下不改变方向的向量。当 $\lambda 1$ 时向量被拉伸当 $0 \lambda 1$ 时向量被压缩当 $\lambda 0$ 时向量反向。举例而言在二维平面的旋转变换中没有任何非零向量能在旋转变换后保持方向不变除了零向量因此旋转矩阵没有特征值准确地说特征值是复数。而在伸缩变换中所有非零向量都是特征向量特征值就是各个方向上的伸缩倍数。1.3 数学性质特征值 $\lambda$ 是特征多项式 $\det(A - \lambda I) 0$ 的根矩阵 $A$ 至多有 $n$ 个线性无关的特征向量矩阵的迹trace等于所有特征值之和$\text{tr}(A) \sum_i \lambda_i$矩阵的行列式等于所有特征值之积$\det(A) \prod_i \lambda_i$对称矩阵的特征值均为实数且特征向量相互正交1.4 代码实现求解特征值与特征向量import numpy as np ​ # 定义一个 2x2 矩阵 A np.array([[4, 2], [1, 3]]) ​ # 使用 NumPy 的 linalg.eig 计算特征值和特征向量 eigenvalues, eigenvectors np.linalg.eig(A) ​ print(矩阵 A:) print(A) print(f\n特征值: {eigenvalues}) print(f特征向量列向量:\n{eigenvectors}) ​ # 验证A x lambda x for i in range(len(eigenvalues)): lambda_i eigenvalues[i] x_i eigenvectors[:, i] # 第 i 个特征向量是第 i 列 left A x_i right lambda_i * x_i print(f\n验证第 {i1} 个: A x {left.round(6)}) print(f lambda x {right.round(6)}) print(f 相等: {np.allclose(left, right)})运行结果矩阵 A: [[4 2] [1 3]] ​ 特征值: [5. 2.] 特征向量列向量: [[ 0.89442719 -0.70710678] [ 0.4472136 0.70710678]] ​ 验证第 1 个: A x [4.472136 2.236068] lambda x [4.472136 2.236068] 相等: True 验证第 2 个: A x [-1.41421356 1.41421356] lambda x [-1.41421356 1.41421356] 相等: True1.5 对称矩阵与正定矩阵对称矩阵$A A^T$ 具有以下重要性质特征值均为实数存在一组正交的特征向量基正定矩阵是对称矩阵的进一步强化所有特征值均为正数$\lambda_i 0$对任意非零向量 $\mathbf{x}$有 $\mathbf{x}^T A \mathbf{x} 0$正定矩阵在优化问题中具有核心地位梯度下降的Hessian矩阵需要正定以保证局部收敛# 对称矩阵示例 A_sym np.array([[2, 1], [1, 2]]) ​ # 正定矩阵示例所有特征值为正 A_pd np.array([[4, 2], [2, 3]]) ​ eigenvalues_sym np.linalg.eigvals(A_sym) eigenvalues_pd np.linalg.eigvals(A_pd) ​ print(f对称矩阵 A_sym 特征值: {eigenvalues_sym}) print(f正定矩阵 A_pd 特征值: {eigenvalues_pd}) print(f\nA_pd 是正定的: {all(eigenvalues_pd 0)})二、特征分解矩阵的谱表示2.1 特征分解原理对于一个 $n \times n$ 的矩阵 $A$如果它有 $n$ 个线性无关的特征向量等价于 $A$ 可对角化则可以将 $A$ 表示为$$A V \Lambda V^{-1}$$其中 $V [\mathbf{v}1, \mathbf{v}2, \cdots, \mathbf{v}_n]$ 是由特征向量组成的矩阵$\Lambda \text{diag}(\lambda_1, \lambda_2, \cdots, \lambda_n)$ 是由特征值组成的对角矩阵。这就是矩阵的特征分解Eigendecomposition也叫谱分解。如果 $A$ 是对称矩阵由于其特征向量相互正交可以进一步表示为$$A Q \Lambda Q^T$$其中 $Q$ 是正交矩阵$Q^T Q I$。2.2 对称矩阵的特征分解代码实现import numpy as np ​ # 定义一个对称矩阵 A np.array([[3, 1, 0], [1, 2, 1], [0, 1, 1]], dtypefloat) ​ # 特征分解 eigenvalues, eigenvectors np.linalg.eig(A) ​ # 对于对称矩阵特征向量已经正交 # 构建对角矩阵 Lambda Lambda np.diag(eigenvalues) ​ # 构建特征向量矩阵 V每列是一个特征向量 V eigenvectors ​ # 验证分解: A ≈ V Lambda V^T A_reconstructed V Lambda np.linalg.inv(V) ​ print(原始矩阵 A:) print(A) print(f\n特征值: {eigenvalues.round(4)}) print(f\n重建矩阵 V Lambda V^(-1):) print(A_reconstructed.round(4)) print(f\n重建误差: {np.linalg.norm(A - A_reconstructed):.2e})三、奇异值分解SVD任意矩阵的分解3.1 从特征分解到SVD特征分解虽然优雅但有严格的限制条件——它只适用于方阵。然而现实中大量问题是矩形矩阵数据矩阵往往是 $m \times n$ 的$m \neq n$。奇异值分解Singular Value Decomposition, SVD打破了这一限制。SVD将任意 $m \times n$ 矩阵 $A$ 分解为$$A U \Sigma V^T$$其中$U$ 是 $m \times m$ 的正交矩阵左奇异向量$\Sigma$ 是 $m \times n$ 的对角矩阵奇异值$V$ 是 $n \times n$ 的正交矩阵右奇异向量奇异值 $\sigma_i$ 位于 $\Sigma$ 的对角线上且按从大到小排列$\sigma_1 \geq \sigma_2 \geq \cdots \geq 0$。3.2 物理意义$V^T$右奇异向量表示输入空间的标准正交基代表数据的特征模式$\Sigma$奇异值表示每个模式的重要性权重类似于特征值$U$左奇异向量表示输出空间的标准正交基代表数据在特征空间中的投影坐标SVD的核心价值在于它将一个复杂的长方形矩阵分解为三个简单矩阵的乘积揭示了数据在低维空间中的结构。3.3 SVD与特征值的关系对于任意矩阵 $A$有如下重要关系$A^T A$ 的特征值是奇异值的平方$\lambda_i \sigma_i^2$$A A^T$ 的特征值同样为 $\sigma_i^2$右奇异向量 $V$ 是 $A^T A$ 的特征向量左奇异向量 $U$ 是 $A A^T$ 的特征向量3.4 代码实现完整的SVD分解import numpy as np ​ # 定义一个 4x3 的矩形矩阵模拟真实数据矩阵 A np.array([[1, 2, 0], [2, 1, 3], [0, 3, 1], [3, 0, 2]], dtypefloat) ​ # 完整的SVD分解 U, s, Vt np.linalg.svd(A, full_matricesTrue) ​ print(原始矩阵 A (4x3):) print(A) print(f\n左奇异向量 U (4x4):\n{U}) print(f\n奇异值 s (3个): {s}) print(f\n右奇异向量 V^T (3x3):\n{Vt}) ​ # 验证: A U Sigma V^T # 构建完整的 Sigma 矩阵 Sigma np.zeros_like(A, dtypefloat) np.fill_diagonal(Sigma, s) ​ A_reconstructed U Sigma Vt print(f\n重建矩阵:\n{A_reconstructed.round(6)}) print(f重建误差: {np.linalg.norm(A - A_reconstructed):.2e}) ​ # 分析奇异值的物理含义 print(f\n奇异值占总能量的比例:) total_energy np.sum(s**2) for i, sigma in enumerate(s): ratio (sigma**2) / total_energy * 100 print(f sigma_{i1} {sigma:.4f}, 贡献 {ratio:.2f}%)四、主成分分析PCASVD的经典应用4.1 PCA原理主成分分析Principal Component Analysis, PCA是最经典的降维方法之一。其核心思想是找到数据中方差最大的方向主成分将数据投影到这些方向上实现降维。从数学上看PCA等价于对数据的协方差矩阵进行特征值分解特征值的大小代表了对应主成分方向上的方差贡献。4.2 PCA与特征值分解的关系设数据矩阵 $X$ 已经中心化每列均值为0则协方差矩阵为$$C \frac{1}{n-1} X^T X$$对 $C$ 进行特征值分解$$C V \Lambda V^T$$其中特征值 $\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_n$ 对应各主成分方向上的方差。前 $k$ 个主成分保留的信息比例为$$\frac{\sum{i1}^k \lambda_i}{\sum{i1}^n \lambda_i}$$4.3 代码实现人脸识别中的PCA降维import numpy as np import matplotlib.pyplot as plt ​ # 模拟生成人脸图像数据这里用随机数据模拟人脸特征向量 # 假设有100个人的人脸图像每张图像是32x321024维向量 np.random.seed(42) n_faces 100 n_pixels 1024 ​ # 模拟人脸数据矩阵中心化后 # 每个人脸图像是1024维向量100个人共100个样本 X np.random.randn(n_faces, n_pixels) * 100 ​ # 计算协方差矩阵 # 注意直接计算 X^T X 是 1024x1024计算量大 # 实际中常用 X X^T 的特征向量来间接求解 # 这里使用 NumPy 的 svd 进行 PCA ​ # 方法一直接使用 SVD U, s, Vt np.linalg.svd(X, full_matricesFalse) ​ # Vt 的每一行是一个主成分方向与特征向量成正比 # 前 k 个主成分方向 k 20 # 保留20个主成分 ​ # 投影数据到前k个主成分上降维 X_pca X Vt[:k].T # (100, 1024) (1024, 20) (100, 20) ​ print(f原始数据维度: {X.shape}) print(fPCA降维后维度: {X_pca.shape}) print(f降维压缩比: {(1 - k/n_pixels)*100:.1f}%) ​ # 计算各主成分的方差解释比例 variances s**2 / (n_faces - 1) total_variance np.sum(variances) explained_ratio np.cumsum(variances[:30]) / total_variance ​ print(f\n前5个主成分累计方差解释比例: {explained_ratio[4]*100:.2f}%) print(f前10个主成分累计方差解释比例: {explained_ratio[9]*100:.2f}%) print(f前20个主成分累计方差解释比例: {explained_ratio[19]*100:.2f}%) ​ # 方法二使用协方差矩阵的特征值分解适用于小维度情况 # 先对 X^T X 进行特征分解 C (X.T X) / (n_faces - 1) # 1024x1024 协方差矩阵 eigenvalues, eigenvectors np.linalg.eig(C) ​ # 取前k个特征向量主成分方向 idx np.argsort(eigenvalues)[::-1] top_k_eigenvectors eigenvectors[:, idx[:k]] ​ # 投影 X_pca_manual X top_k_eigenvectors ​ print(f\n手动PCA与SVD PCA的一致性: {np.allclose(X_pca, X_pca_manual)})4.4 PCA降维的可视化import numpy as np ​ # 使用SVD实现PCA降维到2维用于可视化 # 假设有一组二维数据点 np.random.seed(0) t np.random.uniform(0, 2*np.pi, 100) x 3 * np.cos(t) np.random.randn(100) * 0.5 y 2 * np.sin(t) np.random.randn(100) * 0.5 ​ # 构建数据矩阵 X np.column_stack([x, y]) ​ # 中心化 X_centered X - X.mean(axis0) ​ # 使用SVD进行PCA U, s, Vt np.linalg.svd(X_centered, full_matricesFalse) ​ # 投影到前2个主成分实际上是全部 X_pca X_centered Vt.T ​ print(原始数据形状:, X.shape) print(PCA后的形状:, X_pca.shape) print(f主成分方向从V^T的行提取:\n{Vt}) print(f各主成分的奇异值: {s}) print(f方差解释比例: {s**2 / np.sum(s**2)})五、SVD在AI中的典型应用场景5.1 推荐系统矩阵分解推荐系统中的协同过滤可以建模为用户-物品评分矩阵。设 $R$ 是 $m \times n$ 的评分矩阵$m$ 个用户$n$ 个物品矩阵中大部分元素是未知的用户未评价。矩阵分解的核心思想是将这个稀疏矩阵 $R$ 分解为两个低维矩阵的乘积$$R \approx U \Sigma V^T$$其中 $U$ 是 $m \times k$ 的用户特征矩阵$V^T$ 是 $k \times n$ 的物品特征矩阵$k$ 是隐因子维度。import numpy as np ​ # 模拟用户-物品评分矩阵5个用户6个物品 # 0 表示未评分 R np.array([ [5, 3, 0, 0, 2, 0], [4, 0, 0, 3, 0, 1], [1, 1, 0, 5, 0, 0], [0, 0, 5, 4, 0, 4], [0, 2, 0, 0, 4, 5] ], dtypefloat) ​ print(用户-物品评分矩阵 R:) print(R) print(f矩阵稀疏度: {(R 0).sum() / R.size * 100:.1f}%) ​ # 将0替换为该物品的平均评分简单填充策略 R_filled R.copy() for j in range(R.shape[1]): col R[:, j] if col[col ! 0].size 0: R_filled[col ! 0, j] col[col ! 0] R_filled[col 0, j] col[col ! 0].mean() ​ # 对填充后的矩阵进行SVD U, s, Vt np.linalg.svd(R_filled, full_matricesFalse) ​ # 取前k个奇异值进行低秩近似k2 k 2 U_k U[:, :k] s_k s[:k] Vt_k Vt[:k, :] ​ # 重构低秩近似矩阵 R_approx U_k np.diag(s_k) Vt_k ​ print(f\n使用 k{k} 个隐因子的近似矩阵:) print(R_approx.round(2)) ​ print(f\n重构误差 (Frobenius范数): {np.linalg.norm(R_filled - R_approx, fro):.4f}) ​ # 预测用户3对物品3的评分实际为0 user_idx 2 # 用户3索引2 item_idx 2 # 物品3索引2 predicted_rating R_approx[user_idx, item_idx] print(f\n预测用户3对物品3的评分: {predicted_rating:.2f}) print(f实际评分: {R[user_idx, item_idx]} (未评分))5.2 图像压缩数字图像本质上是一个大矩阵灰度图或多个矩阵彩色图的R、G、B通道。通过SVD分解可以将图像分解为一系列外积的叠加$$A \sum{i1}^r \sigma_i \mathbf{u}i \mathbf{v}_i^T$$其中 $r$ 是矩阵的秩。前 $k$ 项部分和就是对图像的 $k$ 阶近似。$k$ 越大压缩比越低图像质量越好。import numpy as np ​ # 创建一个模拟图像矩阵用随机噪声低秩结构 np.random.seed(123) ​ # 模拟一张 200x200 的图像 # 假设图像的真实结构是低秩的只有10个独立特征 true_rank 10 U_true np.random.randn(200, true_rank) V_true np.random.randn(200, true_rank) true_image U_true V_true.T ​ # 添加噪声 noise np.random.randn(200, 200) * 0.5 image true_image noise ​ print(f图像矩阵形状: {image.shape}) print(f原始图像秩实际很低: {np.linalg.matrix_rank(true_image)}) ​ # 对图像进行SVD U, s, Vt np.linalg.svd(image, full_matricesFalse) ​ # 使用不同数量的奇异值重建图像 original_size image.size compression_results [] ​ for k in [5, 10, 20, 50, 100]: # 取前k个奇异值重建 compressed U[:, :k] np.diag(s[:k]) Vt[:k, :] # 计算压缩比存储 k 个奇异值 k 列 U k 行 V^T # 原始需要存储 mn 个数压缩后需要 k*(m n 1) 个数 compressed_size k * (image.shape[0] image.shape[1] 1) compression_ratio original_size / compressed_size # 计算重建质量PSNR近似 mse np.mean((image - compressed)**2) psnr 10 * np.log10(np.max(image)**2 / mse) compression_results.append({ k: k, ratio: compression_ratio, psnr: psnr, error: np.linalg.norm(image - compressed, fro) }) print(fk{k:3d}: 压缩比{compression_ratio:.2f}x, PSNR{psnr:.2f}dB, 重建误差{compression_results[-1][error]:.2f}) ​ # 可视化不同压缩级别的效果打印误差趋势 print(\n压缩质量变化趋势:) print(k值增加 - 压缩比降低 - PSNR提升 - 重建误差减小)5.3 降维可视化与t-SNE的配合在机器学习中数据的可视化通常需要将高维数据投影到2D或3D空间。SVD/PCA常作为降维流程的第一步粗降维之后再使用t-SNE等非线性方法进行精细降维。import numpy as np ​ # 模拟高维数据如词向量、图像特征等 np.random.seed(42) n_samples 300 original_dim 100 ​ # 生成3个簇的高维数据 X [] for i in range(3): center np.random.randn(original_dim) * 10 cluster center np.random.randn(n_samples // 3, original_dim) X.append(cluster) X np.vstack(X) ​ # 打乱顺序 np.random.shuffle(X) ​ print(f高维数据形状: {X.shape}) ​ # 第一步使用SVD进行线性降维从100D降到20D # 这步可以去噪并加速后续的t-SNE U, s, Vt np.linalg.svd(X, full_matricesFalse) ​ # 降到20维 k 20 X_pca X Vt[:k].T print(fPCA降维后形状: {X_pca.shape}) ​ # 计算保留的方差比例 variance_explained np.sum(s[:k]**2) / np.sum(s**2) print(fPCA保留的方差比例: {variance_explained*100:.2f}%) ​ # 如果需要进一步降到2D用于可视化这里简化为线性PCA X_final X Vt[:2].T print(f最终降维到2D形状: {X_final.shape}) ​ # 实际项目中这里会将X_pca或X_final传给t-SNE进行非线性降维 # from sklearn.manifold import TSNE # X_tsne TSNE(n_components2).fit_transform(X_pca)5.4 潜在语义分析LSA在自然语言处理中LSALatent Semantic Analysis使用SVD对文档-词项矩阵进行分解捕捉词项与文档之间的潜在语义关联。import numpy as np ​ # 模拟文档-词项矩阵 # 4个文档8个词项 # 矩阵中的值表示词项在文档中的出现频次 docs_terms np.array([ [2, 1, 0, 3, 0, 0, 0, 1], # 文档1 [0, 0, 1, 2, 0, 2, 0, 0], # 文档2 [1, 2, 0, 0, 3, 0, 1, 0], # 文档3 [0, 0, 2, 1, 0, 1, 2, 0] # 文档4 ], dtypefloat) ​ print(文档-词项矩阵:) print(docs_terms) ​ # 定义词项和文档的标签用于展示 terms [数据, 算法, 模型, 学习, 网络, 深度, 神经, 训练] docs [文档1, 文档2, 文档3, 文档4] ​ # 对文档-词项矩阵进行SVD U, s, Vt np.linalg.svd(docs_terms, full_matricesFalse) ​ print(f\n奇异值: {s.round(4)}) print(f前两个奇异值占总能量的: {(s[0]**2 s[1]**2) / np.sum(s**2) * 100:.2f}%) ​ # 取k2个隐语义维度 k 2 ​ # 文档在隐语义空间的表示U Sigma doc_semantic U[:, :k] * s[:k] print(f\n文档在2D隐语义空间的表示:) for i, doc in enumerate(docs): print(f {doc}: ({doc_semantic[i, 0]:.4f}, {doc_semantic[i, 1]:.4f})) ​ # 词项在隐语义空间的表示V^T的行 term_semantic Vt[:k, :].T print(f\n词项在2D隐语义空间的表示:) for i, term in enumerate(terms): print(f {term}: ({term_semantic[i, 0]:.4f}, {term_semantic[i, 1]:.4f})) ​ # 语义相似性计算文档1和文档3的相似度 sim_13 np.dot(doc_semantic[0], doc_semantic[2]) / (np.linalg.norm(doc_semantic[0]) * np.linalg.norm(doc_semantic[2])) print(f\n文档1与文档3的余弦相似度: {sim_13:.4f})5.5 谱聚类谱聚类Spectral Clustering是一种基于图论的无监督聚类算法。其核心思想是利用数据的相似度矩阵的特征向量来进行降维然后再用K-Means等算法进行聚类。import numpy as np ​ # 模拟数据3个簇 np.random.seed(42) n_samples 90 X [] for i in range(3): angle i * 2 * np.pi / 3 center np.array([np.cos(angle), np.sin(angle)]) * 2 cluster center np.random.randn(n_samples // 3, 2) * 0.3 X.append(cluster) X np.vstack(X) ​ print(f数据形状: {X.shape}) ​ # 构建相似度矩阵使用高斯核/径向基函数 def rbf_kernel(X, gamma1.0): 计算高斯核相似度矩阵 sq_dists np.sum(X**2, axis1, keepdimsTrue) np.sum(X**2, axis1) - 2 * X X.T return np.exp(-gamma * sq_dists) ​ # 计算相似度矩阵 S rbf_kernel(X, gamma1.0) print(f相似度矩阵形状: {S.shape}) ​ # 构建度矩阵 D对角矩阵对角线上是每行的和 D np.diag(np.sum(S, axis1)) ​ # 计算拉普拉斯矩阵L D - S无归一化或 L I - D^(-1)S归一化 # 这里使用归一化拉普拉斯矩阵 D_inv_sqrt np.diag(1.0 / np.sqrt(np.diag(D))) L_sym np.eye(len(X)) - D_inv_sqrt S D_inv_sqrt ​ # 对拉普拉斯矩阵进行特征分解 eigenvalues, eigenvectors np.linalg.eig(L_sym) ​ # 取最小的k个特征值对应的特征向量排除第一个为0的特征值 k 3 idx np.argsort(eigenvalues.real) features eigenvectors.real[:, idx[1:k1]] # 跳过第一个理论上为0 ​ print(f谱聚类特征向量形状: {features.shape}) ​ # 标准化特征向量 features_normalized features / np.linalg.norm(features, axis1, keepdimsTrue) ​ # 使用K-Means进行聚类简化演示不调用sklearn from sklearn.cluster import KMeans kmeans KMeans(n_clusters3, random_state42, n_init10) labels kmeans.fit_predict(features_normalized) ​ # 统计各簇的样本数 unique, counts np.unique(labels, return_countsTrue) print(f\n聚类结果:) for label, count in zip(unique, counts): print(f 簇 {label}: {count} 个样本) ​ # 注意实际应用中需要使用sklearn的谱聚类实现 # from sklearn.cluster import SpectralClustering # clustering SpectralClustering(n_clusters3, affinityprecomputed).fit(S)六、总结与实践建议6.1 知识点回顾概念适用场景核心公式特征值/特征向量方阵分析、动态系统$A\mathbf{x} \lambda \mathbf{x}$特征分解对称矩阵分析、二次型$A V\Lambda V^{-1}$SVD任意矩阵、推荐系统、压缩$A U\Sigma V^T$PCA降维、去噪、可视化对协方差矩阵做特征分解谱聚类无监督聚类、图像分割拉普拉斯矩阵特征分解6.2 工程实践建议1. 数值稳定性优先在计算特征值和SVD时NumPy底层使用LAPACK的可靠实现一般不需要担心数值稳定性。但如果处理极值或病态矩阵建议先对数据进行标准化。2. 大规模数据的SVD对于超大规模矩阵如百万维度的数据全量SVD的计算代价极高。实际工程中可使用随机化SVDrandomized SVD进行近似求解sklearn的TruncatedSVD提供了这一能力。3. 选择合适的降维维度降维维度的选择需要权衡信息保留与压缩比。PCA中通常选择累计方差解释比例达到85%~95%的维度推荐系统中隐因子维度需要通过A/B测试调优。4. SVD与NMF的选择SVD会产生正负值而非负矩阵分解NMF约束所有分量非负在某些场景下如图像、文本具有更好的可解释性。6.3 进一步学习路径深入理解稀疏SVD和增量SVD应对流式数据场景学习t-SNE和UMAP等非线性降维方法掌握张量分解如CP分解、Tucker分解处理多维数据了解SVD在深度学习中的应用如神经网络的权重矩阵压缩、知识蒸馏等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2595921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…