ML之DR之SVD:SVD算法的简介、场景实现、案例应用之详细攻略

517 篇文章 132 订阅

ML之DR之SVD:SVD算法的简介、场景实现、案例应用之详细攻略

目录

SVD算法的简介

1、SVD算法的概述

《Cool Linear Algebra: Singular Value Decomposition》翻译与解读

2、SVD算法过程

(1)、SVD的数学定义

(2)、公式的推导

(3)、SVD算法两步过程

(4)、理解SVD

3、SVD和子空间的关系

SVD算法的应用场景

1、图像领域的图片压缩案例

2、推荐领域的产品推荐案例

第一步,进行SVD分解并提取前2个特征

(1)、产品矩阵的压缩、用户矩阵的压缩

第二步,利用SVD进行新用户的个性化推荐

SVD的使用方法

1、SVD的python代码实现


SVD算法的简介

1、SVD算法的概述

奇异值分解Singular Value Decomposition:简称SVD,特征分解的广义化,是一种提取特征信息的方法。

《Cool Linear Algebra: Singular Value Decomposition》翻译与解读

地址

论文地址:Cool Linear Algebra: Singular Value Decomposition - Andrew Gibiansky

时间

2013年5月29日

作者

Andrew Gibiansky

解读这篇文章主要论述了矩阵奇异值分解(Singular Value Decomposition, SVD)的理论与应用。
其主要点总结如下:
>> 介绍了矩阵对角化的概念,对角化是对对称矩阵有效,且矩阵必须是方阵
>> SVD能对任意形状的矩阵进行分解,是一种更普遍的对角化方法。它适用于所有矩阵,因此更具应用价值。
>> SVD将一个矩阵A分解为三个矩阵的乘积:A = UΣV^T。其中U和V的列向量正交,Σ为对角矩阵。Σ上的元素称为奇异值
>> SVD从物理意义上可以解释为:任何矩阵变换都可以看作先旋转,然后缩放,最后再旋转
>> 文章给出了 SVD在数据压缩、低秩矩阵近似和解线性方程组等多个应用场景的实例,说明其广泛应用价值。
>> 作者总结 SVD几乎应用在所有学科地,如果在线性代数中记住一个概念,那应该就是奇异值分解。它被广泛应用,是很强大的工具。
本文系统而清晰地介绍了SVD的定义、理论基础以及其在数学、计算机科学等多个应用场景中的实用性,强调了SVD作为一种强大而通用的矩阵分解方法的重要性。

2、SVD算法过程

(1)、SVD的数学定义

假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD:

(1)、通常将奇异值由大而小排列。这样,Σ便能由A唯一确定了。

(2)、与特征值、特征向量的概念相对应:
U的列(columns),组成一套对M的正交"输入"或"分析"的基向量。这些向量是MM*的特征向量。
V的列(columns),组成一套对M的正交"输出"的基向量。这些向量是M*M的特征向量。
Σ对角线上的元素是奇异值,可视为是在输入与输出间进行的标量的"膨胀控制"。这些是M*M及MM*的奇异值,并与U和V的列向量相对应。

(3)、因为U 和V 向量都是单位化的向量, 我们知道U的列向量u1,...,um组成了K空间的一组标准正交基。同样,V的列向量v1,...,vn也组成了K空间的一组标准正交基。

SVD和特征分解的关系

SVD和特征分解的关系:SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求分解的矩阵为方阵

SVD求伪逆

SVD求伪逆:奇异值分解可以被用来计算矩阵的伪逆。若矩阵A的奇异值分解为A=UΣVT ,那么A的伪逆为A伪逆=VΣ伪逆UT

其中Σ伪逆是Σ的伪逆,是将主对角线上每个非零元素都求倒数之后再转置得到的。

(1)、求伪逆通常可以用来求解最小二乘法问题。

(2)、公式的推导



(3)、SVD算法两步过程

第一步,先将原始数据表示成一个矩阵A_m*n;

第二步,SVD把这个大型矩阵分解为3个小矩阵的连乘:

其中r是一个很小的值。对角矩阵Σ_r*r中的所有值,被称为奇异值

(4)、理解SVD

已知4×5阶实矩阵A,求A的SVD分解:

(1)、矩阵U和V都是单位正交方阵:U^T*U=1,V^T*V=1

奇异值分解有时非唯一性:由于Σ有一个对角元是零,故这个奇异值分解值不是唯一的。

3、SVD和子空间的关系

任何秩为r的矩阵A,可以被分解为

(1)、SVD提供了计算四个子空间正交基的一种快速方法。SVD牛叉在,可以把四个正交矩阵联系起来。

SVD算法的应用场景

1、图像领域的图片压缩案例

奇异值top不同个数的应用

 

可以发现,如果我们根据大小排序这些奇异值(矩阵 Σ 的值),那么前 50 个奇异值将包含整个矩阵 Σ 的大小的 85%。根据这个事实,我们可以丢弃后面的 250 个值(即将它们设为 0),仅保留这张小狗图像的「rank(秩)50」版本。值的数量差不多少了 5 倍,但质量却下降很少。上述计算的原因是当我们执行 UΣ'V 运算时,U 和 V 矩阵中的一部分因为乘 0 也被丢弃(其中 Σ' 是 Σ 的修改后版本,其中仅包含了前面的 30 个值)。

低秩矩阵的近似应用

 图像压缩,其实80与原图相差不是很大。SVD中的奇异值的个数分别为1、10、80。


 

2、推荐领域的产品推荐案例

假定Ben、Tom、John、Fred对6种产品进行了评价,评分越高,代表对该产品越喜欢。0表示未评价。

第一步,进行SVD分解并提取前2个特征

(1)、产品矩阵的压缩、用户矩阵的压缩

第二步,利用SVD进行新用户的个性化推荐

思路:对于新用户,如何对其做个性化推荐呢?将A扩展后重新计算SVD,然后聚类用户?
过程:求出新数据的未知V,因为此时已经建立模型(即已知U、Σ),传入新数据A,目的是变换公式求出未知V。


(1)、假设有个Bob的新用户,对6个产品的评分为(5,5,0,0,0,5)T,通过上边的公式计算出Bob的特征点坐标。


(2)、通过计算Bob和现有用户的距离进行聚类:计算余弦距离(一定意义下即相关系数),与其最近的是Ben,因此,可以给Bob推荐Ben喜欢的S5、S3。
Ben:553055
Bob:550005

SVD的使用方法

1、SVD的python代码实现

import numpy as np
def load_data():
    return [    [0,0,0,1,1],
                [0,0,0,2,2],
                [0,0,0,3,3],
                [4,4,4,0,0],
                [5,5,5,0,0],
                [6,6,6,0,0],
                [7,7,7,0,0]]
data = load_data()
u, sigma, vt = np.linalg.svd(data)   #Sigma是个矩阵,Python内部的机制,为了节省空间,因为它除了对角线都是0
print(sigma)#前两个值比后三个值大的多,所以可以取这两个奇异值,把其余三个置0。

[1.94422221e+01 5.29150262e+00 1.86910323e-15 4.48702001e-16
 8.62587679e-18]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值