当前位置: 首页 > article >正文

SVD降维

文章目录

  • 一、SVD降维的基本原理
  • 二、SVD降维的步骤
  • 三、SVD降维的优点
  • 四、SVD降维的应用
  • 五、代码应用
  • 六、SVD降维的局限性

一、SVD降维的基本原理

SVD是线性代数中的一种技术,它将一个矩阵A分解为三个矩阵的乘积:A = UΣV^T。其中,U和V是正交矩阵,Σ是对角矩阵,对角线上的元素称为奇异值。这些奇异值表示了矩阵A在各个方向上的“重要性”或“能量”。

在降维过程中,SVD通过保留矩阵A中最大的几个奇异值,并忽略其他较小的奇异值,来近似地重构原始矩阵。这样做可以在保留数据主要信息的同时,减少数据的维度。

二、SVD降维的步骤

计算SVD:首先,对原始数据矩阵A进行SVD分解,得到矩阵U、Σ和V^T。
选择奇异值:根据需要保留的信息量或数据特征,选择Σ中前k个最大的奇异值。这一步是关键,因为它决定了降维后的数据维度和保留的信息量。
重构矩阵:使用选定的奇异值和对应的U、V^T的子矩阵,重构出一个近似于原始矩阵A但维度更低的矩阵A’。

三、SVD降维的优点

简化数据:通过去除不重要的特征,简化了数据表示,便于后续处理和分析。
去除噪声:较小的奇异值通常与噪声相关,因此通过忽略这些奇异值,可以在一定程度上去除数据中的噪声。
提高算法性能:降维后的数据具有更低的维度,可以减少计算量和存储需求,从而提高算法的性能。

四、SVD降维的应用

SVD降维在多个领域都有广泛的应用,包括但不限于:

推荐系统:在推荐系统中,SVD可以用于构建用户或物品的隐式特征向量,从而计算用户或物品之间的相似度。
图像处理:SVD可以用于图像压缩和去噪。通过保留图像中的主要特征(即较大的奇异值),可以在保持图像质量的同时减少数据量。
文本挖掘:SVD可以用于提取文本数据中的主题或潜在语义结构,帮助理解和分析大量文本数据。

五、代码应用

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt


def pic_compress(k, pic_array):
    global u, sigma, vt, sig, new_pic

    u, sigma, vt = np.linalg.svd(pic_array)  # 进行奇异分解
    sig = np.eye(k) * sigma[:k]  # np.eye用于生成一个单位矩阵
    new_pic = np.dot(np.dot(u[:, :k], sig), vt[:k, :])  # np.dot用于矩阵的乘法运算
    size = u.shape[0] * k + sig.shape[1] + k * vt.shape[1]
    return new_pic, size

img = Image.open("lf.jpg")
ori_img = np.array(img)
new_img, size = pic_compress(100, ori_img)  # 压缩的维度
print("original size:" + str(ori_img.shape[0] * ori_img.shape[1]))
print("compress size:" + str(size))
fig, ax = plt.subplots(1, 2)
ax[0].imshow(ori_img, cmap='gray')
ax[0].set_title("before compress")
ax[1].imshow(new_img, cmap='gray')
ax[1].set_title("after compress")
plt.show()
  • 函数定义:pic_compress 函数接受两个参数:k(要保留的奇异值的数量)和pic_array(图像的NumPy数组表示)。它使用SVD来分解图像矩阵,并尝试通过保留最大的k个奇异值来重构图像。
  • SVD分解:使用 np.linalg.svd 对图像矩阵进行奇异值分解,得到矩阵 U、sigma(奇异值向量)和V的转置。这里需要注意的是,sigma 实际上是一个向量,而不是矩阵。
  • 重构图像:通过创建一个对角矩阵 sig(其前k个对角元素是sigma的前k个元素,其余为0)来重构图像。通过np.dot对矩阵进行运算。
  • 图像处理:读取图像,并进行维度压缩,然后打印原属数据的大小与压缩后数据的大小。
  • 图像显示:使用 matplotlib 来显示原始图像和压缩后的图像。使用了 cmap=‘gray’,这会将图像转换为灰度进行显示。
    在这里插入图片描述

六、SVD降维的局限性

尽管SVD降维具有许多优点,但它也存在一些局限性:

  • 计算复杂度:对于大规模数据集,SVD的计算复杂度较高,可能需要较长的计算时间。
  • 难以解释:SVD降维后的数据维度通常不再具有原始数据的直观意义,因此可能需要额外的解释工作来理解降维后的数据。
  • 无法处理非线性关系:SVD是一种线性降维方法,无法有效处理数据中的非线性关系。

综上所述,SVD降维是一种有效的数据预处理技术,它可以通过提取数据的主要特征来降低数据的维度,并保留大部分重要信息。然而,在使用SVD降维时,也需要注意其局限性,并结合具体应用场景来选择合适的降维方法。


http://www.kler.cn/a/294669.html

相关文章:

  • 数学建模模型算法-Python实现
  • 深入了解Git、GitHub、GitLab及其应用技巧
  • 速盾:cdn和反向代理的关系是什么?
  • 从0开始学docker (每日更新 24-11-7)
  • 【入门篇】A+B Problem——多语言版
  • 微服务容器化部署实践(FontConfiguration.getVersion)
  • 网络安全威胁与防范
  • Java-数据结构-链表-LinkedList(二)|ू・ω・` )
  • 【牛站 / USACO2007】
  • 图欧科技-IMYAI智能助手24年8月更新日志大汇总(含史诗级更新)
  • 如何在SQL Server中恢复多个数据库?
  • C# 获取当前鼠标位置
  • ansible--yaml
  • SOMEIP_ETS_092: SD_Check_Reaction_to_a_Subscribe_with_ttl_0
  • css前段知识点分享
  • pytest运行方式及前置后置封装详解
  • Docker 进阶构建:镜像、网络与仓库管理
  • mariadb容器
  • 8阶段项目:五子棋(附带源码)
  • 服务器数据恢复—infortrend存储中RAID6数据恢复案例
  • 资料分析系统课-刘文超老师
  • ​T​P​三​面​
  • SIGMOD-24概览Part7: Industry Session (Graph Data Management)
  • Wni11 下 WSL 安装 CentOS
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习进阶task3:批量归一化
  • 牛客小白月赛100(A,B,C,D,E,F三元环计数)