首页 > 其他分享 >使用SVD(奇异值分解)进行降维的奇妙之旅

使用SVD(奇异值分解)进行降维的奇妙之旅

时间:2024-09-06 20:52:36浏览次数:6  
标签:之旅 SVD 矩阵 降维 奇异 np size

在数据分析和机器学习的广阔天地中,降维技术占据着举足轻重的地位。当我们面对高维数据时,不仅计算成本高昂,而且容易遭遇“维度灾难”,即随着维度的增加,数据的稀疏性和距离度量失效等问题愈发严重。为了克服这些挑战,各种降维技术应运而生,其中奇异值分解(Singular Value Decomposition, SVD)便是一种强大而优雅的工具。本文将带您踏上一段使用SVD进行降维的奇妙之旅。

什么是SVD?

SVD是一种在信号处理、统计学、机器学习等多个领域广泛应用的数学方法。它将一个任意形状的矩阵分解为三个特定形状的矩阵的乘积:一个正交矩阵、一个对角矩阵(其元素称为奇异值)和另一个正交矩阵的转置。这种分解方式不仅揭示了矩阵的内部结构,还为我们提供了一种有效的降维手段。

公式表示

对于任意m×n矩阵A,其SVD可以表示为:
A=UΣVT
其中,U是m×m的正交矩阵,Σ是m×n的矩形对角矩阵(非零元素为奇异值,按从大到小排列),V是n×n的正交矩阵。

SVD在降维中的应用

在降维场景下,SVD通过保留矩阵A中最重要的特征(即最大的奇异值对应的特征向量)来减少数据的维度。具体来说,我们可以通过选择Σ中最大的k个奇异值(k<min(m,n))以及它们对应的U和V中的列来近似原矩阵A,从而实现降维。

步骤概览

  1. 计算SVD:首先,对原始数据矩阵A进行SVD分解。
  2. 选择奇异值:根据实际需求选择前k个最大的奇异值。
  3. 构建降维矩阵:利用选定的奇异值及其对应的U和V中的列,构建降维后的矩阵。
  4. 解释与应用:分析降维后的数据,应用于后续的数据分析或机器学习任务中。
import numpy as np  
from scipy.linalg import svd  
  
# 假设A是你的原始数据矩阵  
A = np.random.rand(m, n)  # 示例:生成一个m行n列的随机矩阵  
  
# 计算SVD  
U, s, VT = svd(A, full_matrices=False)  # full_matrices=False表示不计算完整的U和VT  
Sigma = np.diag(s)  # 将奇异值向量s转换为对角矩阵Sigma

奇异点:

k = 5  # 假设我们想要降维到5维  
s_k = s[:k]  # 选择前k个最大的奇异值  
U_k = U[:, :k]  # 选择U中与这k个奇异值对应的列  
VT_k = VT[:k, :]  # 注意:这里实际上应该选择VT的前k行,因为VT是V的转置  
# 但由于我们通常与U一起工作来重建降维后的数据,所以VT_k在直接降维中可能不直接使用

优点与局限

  • 优点
    • 高效性:SVD提供了一种快速且有效的降维方法。
    • 保留关键信息:通过保留最大的奇异值,能够较好地保留数据的主要特征。
    • 广泛适用性:适用于各种类型的数据,无需对数据分布做过多假设。
  • 局限
    • 计算复杂度:对于非常大的矩阵,SVD的计算可能相对耗时。
    • 解释性:降维后的数据维度可能不如原始数据直观,解释起来需要一定的背景知识。

实践案例

import numpy as np  
from PIL import Image  
import matplotlib.pyplot as plt  
  
def pic_compress(k, pic_array):  
    # 计算SVD  
    u, sigma, vt = np.linalg.svd(pic_array, full_matrices=False)  
      
    # 构建压缩后的Sigma矩阵  
    sig = np.diag(sigma[:k])  
      
    # 重构压缩后的图像  
    # 注意:这里使用vt[:k, :]的转置来与u[:, :k]相乘  
    new_pic = np.dot(u[:, :k], np.dot(sig, vt[:k, :].T))  
      
    # 计算压缩后的图像大小(这里只是示例,实际节省取决于数据类型和存储方式)  
    # 假设每个元素是float64类型,每个元素占用8字节  
    original_size = pic_array.nbytes  
    compressed_size = u[:, :k].nbytes + sig.nbytes + vt[:k, :].nbytes  
    return new_pic, original_size, compressed_size  
  
# 加载图像并转换为灰度图  
img = Image.open('lufei.jpg').convert('L')  
ori_img = np.array(img)  
  
# 进行图像压缩  
k = 100  
new_img, original_size, compressed_size = pic_compress(k, ori_img)  
  
# 显示结果  
print(f"Original size: {original_size} bytes")  
print(f"Compressed size: {compressed_size} bytes")  
print(f"Compression ratio: {original_size / compressed_size:.2f}")  
  
fig, ax = plt.subplots(1, 2, figsize=(12, 6))  
ax[0].imshow(ori_img, cmap='gray')  
ax[0].set_title("Before Compression")  
ax[0].axis('off')  
  
ax[1].imshow(new_img, cmap='gray')  
ax[1].set_title("After Compression")  
ax[1].axis('off')  
  
plt.show()

注意

  • 在实际应用中,选择k的值是一个重要的步骤,它需要根据数据的特性和任务的需求来确定。
  • SVD降维特别适用于那些可以表示为矩阵形式的数据,如文本数据的TF-IDF矩阵、图像数据的像素矩阵等。
  • 除了SVD之外,还有其他降维技术,如PCA(主成分分析),它在某些情况下与SVD密切相关(特别是在数据已经中心化的情况下)。PCA是SVD在数据协方差矩阵上的应用,但它通常更直接地关注于数据的方差最大化。

标签:之旅,SVD,矩阵,降维,奇异,np,size
From: https://blog.csdn.net/2401_84670644/article/details/141941487

相关文章

  • 揭秘支付对账:确保每一分钱的安全之旅
    1背景介绍1.1对账定义2总览2.1业务现状2.2整体架构3设计思路4数据准备4.1内部数据4.2外部数据4.3海量数据的解决方案5数据核对5.1对账时机5.2对账粒度5.3对账方式6差错处理7小结与展望1背景介绍随着......
  • 指针之旅(3)—— 指针 与 数组
    目录1.数组名的两种意义2. 指针访问数组(指针也能下标引用)3.一维数组传参的本质和sizeof在函数中失效的原因4.指针数组4.1指针数组的概念4.2一级指针数组4.3 一级指针数组模拟实现二维数组5.数组、指针 与字符串6.数组指针(变量)6.1数组指针的概念6.2......
  • 地理信息科学在考古学中的应用:GIS与遥感技术的时空穿梭之旅
    在历史的长河中,每一片土地都承载着文明的记忆。随着科技的进步,地理信息科学(GIS)与遥感技术正逐渐揭开古老秘密的面纱,让沉睡千年的历史遗迹重新焕发光彩。今天,就让我们踏上一场穿越时空的旅程,探索GIS和遥感技术如何在考古发掘和研究中扮演着至关重要的角色。 G......
  • 《机器学习》—— PCA降维
    文章目录一、PCA降维简单介绍二、python中实现PCA降维函数的介绍三、代码实现四、PCA降维的优缺点一、PCA降维简单介绍PCA(主成分分析,PrincipalComponentAnalysis)是一种常用的数据降维技术。它通过线性变换将原始数据转换到新的坐标系统中,使得任何投影的第一大方差......
  • 探索无限知识,儿童百科全书智能体点亮孩子的智慧之旅
    本文由ChatMoney团队出品介绍说明在孩子充满好奇与探索欲望的成长道路上,知识是他们最宝贵的财富。而我们的儿童百科全书智能体,就像一座知识的宝库,为孩子们打开了一扇通往世界的神奇大门。儿童百科全书智能体是专为孩子们精心打造的知识伙伴。它涵盖了丰富多样的领域,从神秘的......
  • 分享4款安全与认证IC:DS28E30P、MAXQ1065GTC、RNG90-MAVDA-T、RNG90-SSVDA-T(介绍)
    1、DS28E30P安全认证器提供了一种基于FIPS-186ECDSA标准的完整认证解决方案,不仅高度安全,而且易于部署。该安全认证器采用ECDSA挑战和响应认证方式,同时利用安全EEPROM来存储密钥和用户数据。该器件提供了一套核心加密工具,这些加密工具由多种集成块衍生而来,包括一个非对称硬件引擎、......
  • 探索魔乐社区:GLM-4V-9B模型微调之旅
    人工智能的浪潮中,魔乐社区以其丰富的资源和开放的环境,逐渐成为了开发者们的新宠。今天,让我们一起走进魔乐社区,通过GLM-4V-9B模型微调的最佳实践,体验这个平台的独特魅力。多模态的新星:GLM-4V-9BGLM-4V-9B是智谱AI推出的最新一代预训练模型GLM-4系列中的开源多模态版本。。它不仅......
  • 利士策分享,探寻现代精神绿洲:喧嚣中的宁静之旅
    利士策分享,探寻现代精神绿洲:喧嚣中的宁静之旅在快节奏的现代生活中,我们仿佛置身于一场无尽的赛跑,信息如潮水般涌来,让人应接不暇。然而,在这喧嚣之中,我们内心深处仍渴望一片宁静的绿洲,一个能让心灵得以栖息的地方。那么,如何在繁忙与压力中,找到并守护这份宁静,成为现代人精神生......
  • P8348 「Wdoi-6」未知之花魅知之旅
    题意设一个好的序列由\(a_0\)与\(a_1\)生成而来。满足,对于\(1<i<n\),\(a_{i-1},a_i,a_{i+1}\)中最大一个数等于其他两个之和,以及所以元素都不小于\(k\)。有\(T\)次询问,每次给定\((a_0,a_1,x,y,k)\)满足限制,且有序列\(a\)中有两项相邻依次为\(x,y\)......
  • 【探索云端之旅】亚马逊云科技任务挑战赛!
    亚马逊云科技产品免费试用机会来啦!为了帮助更多开发者了解亚马逊云科技,体验亚马逊云科技产品的强大之处,51CTO携手亚马逊云科技推出“亚马逊云科技任务挑战赛”,通过“注册任务”和“试用任务”,为开发者提供免费试用亚马逊云科技产品的机会,助力开发者探索云计算的无限潜力!完成任务有......