天津做网站的公司排名,网站建设费用要多少,来宾北京网站建设,专业网页制作行情奇异值SVD分解
知识点回顾#xff1a;
线性代数概念回顾奇异值推导奇异值的应用 a. 特征降维#xff1a;对高维数据减小计算量、可视化 b. 数据重构#xff1a;比如重构信号、重构图像#xff08;可以实现有损压缩#xff0c;k 越小压缩率越高#xff0c;但图像质量损失…奇异值SVD分解
知识点回顾
线性代数概念回顾奇异值推导奇异值的应用 a. 特征降维对高维数据减小计算量、可视化 b. 数据重构比如重构信号、重构图像可以实现有损压缩k 越小压缩率越高但图像质量损失越大 c. 降噪通常噪声对应较小的奇异值。通过丢弃这些小奇异值并重构矩阵可以达到一定程度的降噪效果。 d. 推荐系统在协同过滤算法中用户-物品评分矩阵通常是稀疏且高维的。SVD (或其变种如 FunkSVD, SVD) 可以用来分解这个矩阵发现潜在因子 (latent factors)从而预测未评分的项。这里其实属于特征降维的部分。
知识点回顾
对于任何矩阵如结构化数据可以变为样本*特征的矩阵图像数据天然就是矩阵均可做等价的奇异值SVD分解对于分解后的矩阵可以选取保留前K个奇异值及其对应的奇异向量重构原始矩阵可以通过计算Frobenius 范数相对误差来衡量原始矩阵和重构矩阵的差异。
应用结构化数据中将原来的m个特征降维成k个新的特征新特征是原始特征的线性组合捕捉了数据的主要方差信息降维后的数据可以直接用于机器学习模型如分类、回归通常能提高计算效率并减少过拟合风险。
ps在进行 SVD 之前通常需要对数据进行标准化均值为 0方差为 1以避免某些特征的量纲差异对降维结果的影响。
作业尝试利用svd来处理心脏病预测看下精度变化
笔记
奇异值分解Singular Value Decomposition, SVD是线性代数中极具影响力的工具其核心价值在于能处理任意形状的矩阵同时在高维数据处理场景中发挥关键作用。以下将从线性代数基础回顾切入逐步推导奇异值的数学逻辑最终结合实际场景解析应用形成完整的知识闭环。
一、线性代数概念回顾SVD 的数学基础
SVD 的推导依赖线性代数中 “矩阵变换”“特征值与特征向量” 等核心概念需先明确以下基础
1. 矩阵的几何意义线性变换
任意一个 m×n 矩阵 A本质是一种从 n 维空间到 m 维空间的线性变换其作用包括
拉伸 / 压缩沿某个方向放大或缩小向量长度旋转改变向量的方向仅当矩阵为方阵且行列式非负时可能发生投影将高维向量映射到低维子空间如 3 维向量投影到 2 维平面。
例如2×2 矩阵A [[2,0],[0,1]]表示将 x 轴方向的向量拉伸 2 倍y 轴方向的向量保持不变。
2. 特征值与特征向量仅针对方阵
对于 n×n 方阵A若存在非零向量 v 和 scalar标量λ满足 Av λv则
v 称为 A 的特征向量表示矩阵 A 对该向量仅产生 “拉伸 / 压缩”不改变方向或反向λ 称为 A 的特征值表示拉伸 / 压缩的比例λ1 拉伸0λ1 压缩λ0 反向拉伸。
关键性质 若方阵 A 是实对称矩阵满足 A^T AA^T 为 A 的转置则其特征向量两两正交且可构成 n 维空间的标准正交基向量长度为 1两两内积为 0。这一性质是 SVD 推导的核心前提。
3. 正交矩阵与标准正交基
若矩阵 U 满足 U^T U II 为单位矩阵则 U 为正交矩阵其列向量构成标准正交基。 正交矩阵的核心作用对向量做 “旋转 / 反射” 变换时不改变向量的长度和夹角例如将直角坐标系旋转后坐标轴仍垂直向量长度不变。
二、奇异值的推导从数学逻辑到公式
SVD 的目标是将任意m×n 矩阵 A 分解为 3 个具有明确几何意义的矩阵乘积即 A UΣV^T其中
Um×m 正交矩阵列向量为 A 的 “左奇异向量” Σm×n 对角矩阵对角线上的非负元素为 A 的 “奇异值”且从大到小排列 V^Tn×n 正交矩阵的转置行向量为 A 的 “右奇异向量”。
以下分 3 步推导避开复杂证明聚焦逻辑链
步骤 1构造实对称矩阵利用特征值性质
由于 A 是 m×n 矩阵其转置 A^T 是 n×m 矩阵因此
A^T A 是 n×n 实对称矩阵满足 (A^T A)^T A^T (A^T)^T A^T AA A^T 是 m×m 实对称矩阵同理满足 (A A^T)^T A A^T。
根据实对称矩阵的性质A^T A 和 A A^T 的特征值均为非负数且两者有相同的非零特征值设为 λ₁ ≥ λ₂ ≥... ≥ λ_k 0k ≤ min(m,n)。
步骤 2定义奇异值与奇异向量
奇异值将 A^T A或 A A^T的非零特征值开平方得到 A 的奇异值即 σ_i √λ_ii1,2,...,k且满足 σ₁ ≥ σ₂ ≥... ≥ σ_k 0 对角矩阵 Σ 中前 k 个对角元素为 σ₁, σ₂,..., σ_k其余元素为 0。右奇异向量V 的列向量 取 A^T A 的特征向量按特征值从大到小排列构成 n×n 正交矩阵 V其列向量即为 A 的右奇异向量。左奇异向量U 的列向量 对每个非零奇异值σ_i定义 u_i (A v_i) / σ_iv_i 是 A^T A 的第 i 个特征向量则 u_i 是 A A^T 的第 i 个特征向量 将 u₁, u₂,..., u_k 补充正交向量若 m k构成 m×m 正交矩阵 U其列向量即为 A 的左奇异向量。
步骤 3验证分解式 A UΣV^T
将 V 的列向量 v₁,..., vₙ 视为 n 维空间的标准正交基对任意 n 维向量 x可表示为 x c₁v₁ ... cₙvₙc_i 为系数。 矩阵 A 对 x 的变换为 A x c₁A v₁ ... cₙA vₙ 由左奇异向量定义 A v_i σ_i u_ii≤k且 ik 时 σ_i0因此 A x c₁σ₁ u₁ ... c_kσ_k u_k 这意味着A 将 n 维空间的基 v₁,..., vₙ通过 “拉伸σ_i 倍 映射到 m 维空间的基 u₁,..., u_k” 实现线性变换与 A UΣV^T 的矩阵乘法逻辑完全一致。
三、奇异值的应用从理论到实际场景
SVD 的所有应用均基于一个核心规律前 k 个最大的奇异值σ₁,..., σ_k包含了矩阵 A 的绝大部分信息后面的小奇异值往往对应冗余、噪声或次要细节。通过保留前 k 个奇异值可在 “效果” 与 “成本”计算量、存储量间找到最优平衡。
a. 特征降维解决 “维度灾难”
核心问题 高维数据如 1000 维的用户行为数据、10000 维的图像像素数据会带来两大挑战
计算成本高例如计算两个 10000 维向量的距离需遍历 10000 个元素可视化困难人类仅能感知 2/3 维空间高维数据无法直接观察规律。
SVD 降维逻辑 对 m×n 数据矩阵 Am 个样本n 个特征做 SVD 分解 A UΣV^T取前 k 个奇异值对应的
V 的前 k 列V_kn×k 矩阵降维后的数据矩阵为 A_k A V_k U_k Σ_km×k 矩阵k 远小于 n。
典型场景
高维数据可视化将 1000 维的商品特征数据降到 2 维用散点图聚类如 “高端家电”“平价日用品” 两类商品明显分离加速机器学习对文本的 TF-IDF 矩阵m×nm 为文档数n 为词汇数降维后再输入 SVM、KNN 等算法计算时间可减少 90% 以上。
b. 数据重构实现 “有损压缩”
核心逻辑 数据重构是降维的逆过程用降维时保留的 U_km×k、Σ_kk×k、V_k^Tk×n重构近似原矩阵 A_hat U_k Σ_k V_k^T。 重构的关键权衡
k越小保留的奇异值越少 → 压缩率越高如图片文件体积缩小→ 质量损失越大如图片模糊k越大越接近原矩阵 → 质量越好 → 压缩率越低。
典型场景
图像压缩一张 1024×1024 的灰度图矩阵 1024×1024取前 50 个奇异值重构文件体积仅为原大小的 (1024×50 50 1024×50)/(1024×1024) ≈ 10%但肉眼几乎看不出模糊若取前 10 个奇异值压缩率达 98%但图像细节明显丢失信号压缩语音信号、传感器时序信号如温度监测数据通过 SVD 丢弃小奇异值后可在保证可辨识度的前提下减少数据传输量。
c. 降噪过滤 “无规律噪声”
核心观察 数据中的噪声如图片的斑点、信号的杂波通常是 “无规律的小波动”对应的奇异值极小而数据的核心信息如图片主体、信号趋势对应大奇异值。
降噪步骤
对含噪声的矩阵 A_noise 做 SVD 分解得到所有奇异值 σ₁ ≥ σ₂ ≥... ≥ σ_k设定阈值 t如取 t 0.1σ₁丢弃所有σ_i t的奇异值用保留的大奇异值重构矩阵 A_clean U_k Σ_k V_k^T即得到降噪后的数据。
典型场景
图像降噪老照片的划痕、低光照拍摄的噪点通过 SVD 降噪后画面清晰度显著提升传感器数据降噪温度传感器采集的数据含随机波动噪声丢弃小奇异值后可清晰看到 “白天升温、夜间降温” 的趋势。
d. 推荐系统挖掘 “潜在因子”
核心问题 用户 - 物品评分矩阵 Am×nm 为用户数n 为物品数是 “稀疏高维” 的 ——90% 以上的元素为空白用户未评分无法直接用传统方法预测空白评分。
SVD 推荐逻辑 通过 SVD或适用于稀疏矩阵的变种如 FunkSVD、SVD分解评分矩阵发现潜在因子Latent Factors
U 的行向量用户的偏好因子如 “喜欢科幻电影、讨厌言情电影”V 的列向量物品的属性因子如 “科幻电影、言情电影”空白评分预测用户 i 对物品 j 的评分 ≈ U_i Σ V_j^T即用户偏好与物品属性的匹配度。
本质关联 该应用本质是 “特征降维” 的延伸将高维的 “用户 - 物品” 维度降到低维的 “潜在因子” 维度如 50 个因子从而解决稀疏性问题。
四、总结SVD 的核心价值
SVD 的所有应用均围绕 “抓住主要矛盾” 展开 —— 用少数大奇异值核心信息替代大量小奇异值冗余 / 噪声在 “效果” 与 “成本” 间找到最优解。其之所以成为数据科学、机器学习的核心工具正是因为它能以简洁的数学形式解决高维数据处理的共性问题降维、压缩、降噪、稀疏性且兼具理论严谨性与工程实用性。
五、矩阵降维案例
import numpy as np# 创建一个矩阵 A (5x3)
A np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9],[10, 11, 12],[13, 14, 15]])
print(原始矩阵 A:)
print(A)# 进行 SVD 分解
U, sigma, Vt np.linalg.svd(A, full_matricesFalse)
print(\n奇异值 sigma:)
print(sigma)# 保留前 k1 个奇异值进行降维
k 1
U_k U[:, :k] # 取 U 的前 k 列因为要保持行数不变
sigma_k sigma[:k] # 取前 k 个奇异值
Vt_k Vt[:k, :] # 取 Vt 的前 k 行因为要保持列数不变# 近似重构矩阵 A,常用于信号or图像筛除噪声
A_approx U_k np.diag(sigma_k) Vt_k
print(\n保留前, k, 个奇异值后的近似矩阵 A_approx:)
print(A_approx)# 计算近似误差
error np.linalg.norm(A - A_approx, fro) / np.linalg.norm(A, fro)
print(\n近似误差 (Frobenius 范数相对误差):, error)
原始矩阵 A:
[[ 1 2 3][ 4 5 6][ 7 8 9][10 11 12][13 14 15]]奇异值 sigma:
[3.51826483e01 1.47690770e00 9.86023090e-16]保留前 1 个奇异值后的近似矩阵 A_approx:
[[ 1.85152908 2.05208851 2.25264793][ 4.5411984 5.03310541 5.52501242][ 7.23086771 8.01412231 8.7973769 ][ 9.92053702 10.99513921 12.06974139][12.61020633 13.9761561 15.34210588]]近似误差 (Frobenius 范数相对误差): 0.04194136031471535作业
import numpy as np #计算
import pandas as pd # 数据处理
from sklearn.model_selection import train_test_split #划分训练集测试集
from sklearn.linear_model import LogisticRegression # 模型
from sklearn.metrics import accuracy_score # 准确度data pd.read_csv(heart.csv)# 设置随机种子以便结果可重复
np.random.seed(42)# 区分标签和特征
X data.drop(target,axis1)
y data[target]# 做标准化处理
from sklearn.preprocessing import StandardScalerscaler StandardScaler()
X_scaled scaler.fit_transform(X)
X_scaled scaler.transform(X)# 划分训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X_scaled, y, test_size0.2, random_state42)
print(f训练集形状: {X_train.shape})
print(f测试集形状: {X_test.shape})# 对训练集进行 SVD 分解
U_train, sigma_train, Vt_train np.linalg.svd(X_train, full_matricesFalse)
print(fVt_train 矩阵形状: {Vt_train.shape})# 选择保留的奇异值数量 k
k 6
Vt_k Vt_train[:k, :] # 保留前 k 行
print(f保留 k{k} 后的 Vt_k 矩阵形状: {Vt_k.shape})# 降维训练集X_train_reduced X_train Vt_k.T
X_train_reduced X_train Vt_k.T
print(f降维后训练集形状: {X_train_reduced.shape})# 使用相同的 Vt_k 对测试集进行降维X_test_reduced X_test Vt_k.T
X_test_reduced X_test Vt_k.T
print(f降维后测试集形状: {X_test_reduced.shape})# 训练模型以逻辑回归为例
model LogisticRegression(random_state42)
model.fit(X_train_reduced, y_train)# 预测并评估
y_pred model.predict(X_test_reduced)
accuracy accuracy_score(y_test, y_pred)
print(f测试集准确率: {accuracy:.4f})# 计算训练集的近似误差可选仅用于评估降维效果
X_train_approx U_train[:, :k] np.diag(sigma_train[:k]) Vt_k
error np.linalg.norm(X_train - X_train_approx, fro) / np.linalg.norm(X_train, fro)
print(f训练集近似误差 (Frobenius 范数相对误差): {error:.4f})训练集形状: (242, 13)
测试集形状: (61, 13)
Vt_train 矩阵形状: (13, 13)
保留 k6 后的 Vt_k 矩阵形状: (6, 13)
降维后训练集形状: (242, 6)
降维后测试集形状: (61, 6)
测试集准确率: 0.8852
训练集近似误差 (Frobenius 范数相对误差): 0.5709浙大疏锦行