自学内容网 自学内容网

24/11/6 算法笔记 SVD

SVD,即奇异值分解(Singular Value Decomposition),是线性代数中一种重要的矩阵分解方法。

定义

对于任何给定的 m×nm×n 的实数矩阵 AA(其中 mm 是行数,nn 是列数),SVD分解可以表示为:

应用

  1. 数据降维:SVD 可以用于数据降维,尤其是在 PCA 中。通过保留最大的几个奇异值及其对应的左奇异向量和右奇异向量,可以近似原始数据矩阵。

  2. 推荐系统:在推荐系统中,SVD 可以用来分解用户-项目评分矩阵,以发现用户的潜在偏好和项目的隐含特征。

  3. 图像压缩:SVD 可以用于图像压缩,通过保留主要的奇异值和对应的向量,可以在保持图像质量的同时减少存储空间。

  4. 信号处理:在信号处理中,SVD 可以用于噪声降低和信号分离。

接下来手搓一个简易的svd

import numpy as np

def simple_svd(A):
    # 计算A的协方差矩阵的特征值和特征向量
    covariance_matrix = np.dot(A.T, A)
    eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)
    
    # 对特征值进行排序(从大到小),并获取对应的特征向量
    sorted_indices = np.argsort(eigenvalues)[::-1]
    eigenvalues = eigenvalues[sorted_indices]
    eigenvectors = eigenvectors[:, sorted_indices]
    
    # 计算奇异值(特征值的平方根)
    singular_values = np.sqrt(eigenvalues)
    
    # 计算U和V
    U = np.dot(A, eigenvectors)
    V = eigenvectors
    
    # 由于U应该是正交的,我们需要归一化它的列
    U = U / np.linalg.norm(U, axis=0)[:, np.newaxis]
    
    return U, singular_values, V

# 示例:创建一个矩阵A
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=float)

# 调用自定义SVD函数
U, S, V = simple_svd(A)

print("U matrix:\n", U)
print("Sigma (S) values:\n", S)
print("V matrix:\n", V)

每段代码的解释

计算协方差矩阵的特征值和特征向量

covariance_matrix = np.dot(A.T, A)
eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)

 对特征值进行排序并获取对应的特征向量

sorted_indices = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[sorted_indices]
eigenvectors = eigenvectors[:, sorted_indices]

计算奇异值

什么是奇异值,有什么用

通过保留最大的几个奇异值及其对应的奇异向量,可以有效地减少数据的维度,同时保留数据中最重要的特征。

singular_values = np.sqrt(eigenvalues)

 计算 U 和 V

U = np.dot(A, eigenvectors)
V = eigenvectors
  • np.dot(A, eigenvectors) 计算矩阵 A 与其特征向量的点积,得到左奇异向量矩阵 U
  • V = eigenvectors 直接将特征向量矩阵作为右奇异向量矩阵 V

计算了u,s,v后能干嘛

  1. 数据降维

    通过保留最大的几个奇异值及其对应的奇异向量,可以对数据进行降维处理。这在PCA(主成分分析)中非常有用,可以用于图像压缩、数据压缩和噪声降低等场景。

SVD(奇异值分解)的思想是将一个复数或实数矩阵分解为三个特定的矩阵,使得原始矩阵可以通过这三个矩阵的乘积来重构。

SVD的思想在于提供了一种将矩阵分解为更基本、更易于分析和处理的组成部分的方法。这种分解揭示了矩阵的内在结构,使得我们可以在不同的应用中利用这些结构,如数据降维、信号处理、机器学习等。SVD是一种强大的数学工具,因为它适用于任何矩阵,无论其是否是方阵,是否是满秩的


原文地址:https://blog.csdn.net/yyyy2711/article/details/143582149

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!