SVD

PCA降维的大致思想就是: 挑选特征明显的、显得比较重要的信息保留下来

那么关键就是【特征明显的,重要的信息】如何选择? 选择标准有两个:
1: 同一个维度内的数据,方差大的比较明显,因为方差大表示自己和平均水平差异大,有个性,降维后也最可能分的开~
2: 两个不同维度间关联度越小越好,因为关联度小表示这两个维度表征共同信息的量比较少,最理想就是两个维度不相关,相关度为0(相关度可以用协方差cov(a,b)表示),在线性空间内表现为两个维度正交~

协方差矩阵的主对角线和其余元素正好可以分别表示方差和协方差,而根据两条标准又很容易想到求特征值和特征向量,推导过程

------------------------------------------------------------------------------------------------------------------

下面说一下为啥还有SVD,上面我们说PCA针对的是协方差矩阵C,但你得知道协方差矩阵是个方阵啊,难道不是方阵我们就不资瓷么?? 所以就有了SVD~~

大概可以把SVD看作是对非方阵做PCA处理的一种方式啦,毕竟两者的套路都差不多,分解出特征值(SVD里是奇异值,数据XX‘的特征值的平方根),挑比较大的特征值对应的特征向量构成投影矩阵,然后做线性变换(将数据X投影到低维空间)

SVD分解出的左右两个矩阵表达的信息是不一样的,比如常见的推荐系统里一般会分解出用户信息和商品信息两个矩阵

任意一个M*N的矩阵A(M行*N列M>N),可以被写成三个矩阵的乘积:

1. U:(M行M列的列正交矩阵)---用户信息

2. S:(M*N的对角线矩阵,矩阵元素非负)

3. V:(N*N正交矩阵的倒置)---商品信息

即 A=U*S*V‘(注意矩阵V需要倒置)

直观地说:

假设我们有一个矩阵,该矩阵每一列代表一个user,每一行代表一个item。

如上图,ben,tom….代表user,season n代表item。

矩阵值代表评分(0代表未评分):

如 ben对season1评分为5,tom对season1 评分为5,tom对season2未评分。

机器学习和信息检索:

机器学习的一个最根本也是最有趣的特性是数据压缩概念的相关性。

如果我们能够从数据中抽取某些有意义的感念,则我们能用更少的比特位来表述这个数据。

从信息论的角度则是数据之间存在相关性,则有可压缩性。

SVD就是用来将一个大的矩阵以降低维数的方式进行有损地压缩。

降维:

下面我们将用一个具体的例子展示svd的具体过程。

首先是A矩阵。

A =

     5     5     0     5
     5     0     3     4
     3     4     0     3
     0     0     5     3
     5     4     4     5
     5     4     5     5

(代表上图的评分矩阵)

使用matlab调用svd函数:

[U,S,Vtranspose]=svd(A)

U =
   -0.4472   -0.5373   -0.0064   -0.5037   -0.3857   -0.3298
   -0.3586    0.2461    0.8622   -0.1458    0.0780    0.2002
   -0.2925   -0.4033   -0.2275   -0.1038    0.4360    0.7065
   -0.2078    0.6700   -0.3951   -0.5888    0.0260    0.0667
   -0.5099    0.0597   -0.1097    0.2869    0.5946   -0.5371
   -0.5316    0.1887   -0.1914    0.5341   -0.5485    0.2429

S =
   17.7139         0         0         0
         0    6.3917         0         0
         0         0    3.0980         0
         0         0         0    1.3290
         0         0         0         0
         0         0         0         0

Vtranspose =
   -0.5710   -0.2228    0.6749    0.4109
   -0.4275   -0.5172   -0.6929    0.2637
   -0.3846    0.8246   -0.2532    0.3286
   -0.5859    0.0532    0.0140   -0.8085

分解矩阵之后我们首先需要明白S的意义。

可以看到S很特别,是个对角线矩阵。

每个元素非负,而且依次减小,具体要讲明白元素值的意思大概和线性代数的特征向量,特征值有关。

但是可以大致理解如下:

在线性空间里,每个向量代表一个方向。

所以特征值是代表该矩阵向着该特征值对应的特征向量的方向的变化权重。

所以可以取S对角线上前k个元素。

当k=2时候即将S(6*4)降维成S(2*2)

同时U(6*6),Vtranspose(4*4)相应地变为 U(6*2),Vtranspose(4*2).

如下图(图片里的usv矩阵元素值和我自己matlab算出的usv矩阵元素值有些正负不一致,但是本质是相同的):

此时我们用降维后的U,S,V来相乘得到A2

A2=U(1:6,1:2)*S(1:2,1:2)*(V(1:4,1:2))‘ //matlab语句
A2 =

    5.2885    5.1627    0.2149    4.4591
    3.2768    1.9021    3.7400    3.8058
    3.5324    3.5479   -0.1332    2.8984
    1.1475   -0.6417    4.9472    2.3846
    5.0727    3.6640    3.7887    5.3130
    5.1086    3.4019    4.6166    5.5822

此时我们可以很直观地看出,A2和A很接近,这就是之前说的降维可以看成一种数据的有损压缩。

接下来我们开始分析该矩阵中数据的相关性。

我们将u的第一列当成x值,第二列当成y值。即u的每一行用一个二维向量表示,同理v的每一行也用一个二维向量表示。

如下图:

从图中可以看出:

Season5,Season6特别靠近。Ben和Fred也特别靠近。

同时我们仔细看一下A矩阵可以发现,A矩阵的第5行向量和第6行向量特别相似,Ben所在的列向量和Fred所在的列向量也特别相似。

所以从直观上我们发现U矩阵和V矩阵可以近似来代表A矩阵,换据话说就是将A矩阵压缩成U矩阵和V矩阵,至于压缩比例得看当时对S矩阵取前k个数的k值是多少。

到这里,我们已经完成了一半。

寻找相似用户:

依然用实例来说明:

我们假设,现在有个名字叫Bob的新用户,并且已知这个用户对season n的评分向量为:[5 5 0 0 0 5]。(此向量为列向量)

我们的任务是要对他做出个性化的推荐。

我们的思路首先是利用新用户的评分向量找出该用户的相似用户。

如上图(图中第二行式子有错误,Bob的转置应为行向量)。

对图中公式不做证明,只需要知道结论,结论是得到一个Bob的二维向量,即知道Bob的坐标。

将Bob坐标添加进原来的图中:

然后从图中找出和Bob最相似的用户。

注意,最相似并不是距离最近的用户,这里的相似用余弦相似度计算。(关于相似度还有很多种计算方法,各有优缺点)

即夹角与Bob最小的用户坐标。

可以计算出最相似的用户是ben。

接下来的推荐策略就完全取决于个人选择了。

这里介绍一个非常简单的推荐策略:

找出最相似的用户,即ben。

观察ben的评分向量为:【5 5 3 0 5 5】。

对比Bob的评分向量:【5 5 0 0 0 5】。

然后找出ben评分过而Bob未评分的item并排序,即【season 5:5,season 3:3】。

即推荐给Bob的item依次为 season5 和 season3。

最后还有一些关于整个推荐思路的可改进的地方:

1.

svd本身就是时间复杂度高的计算过程,如果数据量大的情况恐怕时间消耗无法忍受。 不过可以使用梯度下降等机器学习的相关方法来进行近似计算,以减少时间消耗。

2.

相似度计算方法的选择,有多种相似度计算方法,每种都有对应优缺点,对针对不同场景使用最适合的相似度计算方法。

3.

推荐策略:首先是相似用户可以多个,每个由相似度作为权重来共同影响推荐的item的评分。

原文地址:https://www.cnblogs.com/ylHe/p/9210925.html

时间: 2024-11-01 23:05:58

SVD的相关文章

奇异值分解(SVD) --- 几何意义 (转载)

PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把 这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象,真心希望路过的各路朋友能从不同的角度阐述下自己对SVD实际意义的理 解,比如 个性化推荐中应用了SVD,文本以及Web挖掘的时候也经常会用到SVD. 原文:We recommend a singular value decomposition 关于线性变换部分的一些知识可以猛戳这里  奇异值分解(S

自适应滤波:奇异值分解SVD

作者:桂. 时间:2017-04-03  19:41:26 链接:http://www.cnblogs.com/xingshansi/p/6661230.html 声明:欢迎被转载,不过记得注明出处哦~ [读书笔记10] 前言 广义逆矩阵可以借助SVD进行求解,这在上一篇文章已经分析.本文主要对SVD进行梳理,主要包括: 1)特征向量意义: 2)特征值分解与SVD: 3)PCA与SVD: 内容为自己的学习记录,其中多有借鉴他人之处,最后一并给出链接. 一.特征向量 第一反应是:啥是特征向量?为什

(转)机器学习之SVD分解

一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩阵,称为右奇异矩阵. 二.SVD奇异值分解与特征值分解的关系 特征值分解与SVD奇异值分解的目的都是提取一个矩阵最重要的特征.然而,特征值分解只适用于方阵,而SVD奇异值分解适用于任意的矩阵,不一定是方阵. 这里,和是方阵,和为单位矩阵,为的特征向量,为的特征向量.和的特征值为的奇异值的平方. 三.

非对称SVD电影推荐系统

采用1M MovieLensz数据(80%train, 20%test, UserIDs range between 1 and 6040 ,MovieIDs range between 1 and 3952, From http://files.grouplens.org/datasets/movielens/) 进行训练和测试,在k仅为10时,得到最佳RMSE为0.854743.在100k数据上k=100时最佳RMSE为0.916602. 以下公式和文字来自陈靖_的博文 http://blo

[机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用

本文先从几何意义上对奇异值分解SVD进行简单介绍,然后分析了特征值分解与奇异值分解的区别与联系,最后用python实现将SVD应用于推荐系统. 1.SVD详解 SVD(singular value decomposition),翻译成中文就是奇异值分解.SVD的用处有很多,比如:LSA(隐性语义分析).推荐系统.特征压缩(或称数据降维).SVD可以理解为:将一个比较复杂的矩阵用更小更简单的3个子矩阵的相乘来表示,这3个小矩阵描述了大矩阵重要的特性. 1.1奇异值分解的几何意义(因公式输入比较麻烦

SVD总结

1.概述 我们先从实数域R开始说起,再延伸到复数域C上去,先列出一个表格,把实数域以及复数域中常见的矩阵及其性质概括如下: 表1 常见矩阵及其性质 我们知道实对称矩阵正交相似于对角阵,从而将一个方阵对角化,那么一个的矩阵能否对角化为对角阵呢,答案是肯定的,这也是奇异值分解(singular value decomposition,SVD)的意义所在. 设A是一个矩阵,则存在m阶正交矩阵U和n阶正交矩阵V,满足 其中.习惯上,设,称为奇异值(singular value),称U和V的前r列向量为奇

如何轻松干掉svd(矩阵奇异值分解),用代码说话

svd我认识我机器学习里面最扯淡的玩意了.尼玛.老实说,好多机器学习的书老是在扯svd有多高端,然后看了netflix电影推荐大赛,哇塞,冠军队就是用svd+做的.然后狠狠的下载了所有他们的论文,硬是没看明白.后来居然对svd有恐惧感.感觉这个玩意好高端似的.你看他啊,它能提高预测精度,它好像是万能的,能降维,什么比赛有事没事都要扯扯svd.后来看Kaggle上的比赛,有个walmat仓储量预测大赛,也是对数据先用svd预处理. 回去下载了好多svd论文看,搞了好久都没搞明白.他们都是说自己如何

SVD小结

1.矩阵分解 假设一个矩阵Data是m行n列,SVD(奇异值分解)将Data分解为U,E,VT 三个矩阵: Datam*n=Um*kEk*kVTk*n E是一个对角矩阵,对角元素为奇异值,对应Data的奇异值,即Data*DataT特征值的平方 2.选取特征 下面确定选取哪几维特征实现降维,去除噪声和冗余信息,用低维数据集表示原数据集. 典型做法是保留矩阵90%能量信息,公式如下,先选一个值h: 奇异阵的平方 sig=ETE 如果奇异阵的平方中前i项的和大于奇异阵的平方总和,即sum(sig[:

机器学习实战精读--------奇异值分解(SVD)

奇异值分解(SVD):是一种强大的降维工具,通过利用SVD来逼近矩阵并从中提取重要特征,通过保留矩阵80%~ 90%的能量,就能得到重要的特征并去掉噪声 SVD分解会降低程序的速度,大型系统中SVD每天运行一次或者频率更低,并且还要离线进行. 隐性语义索引(LST):试图绕过自然语言理解,用统计的办法得到相同的目标 隐性语义分析(LSA):LSA的基本思想就是把高维的文档降到低维空间,那个空间被称为潜在语义空间 协同过滤:通过将用户和其它用户的数据进行对比来实现推荐. 协同过滤的缺点: ① 用户

SVD简化数据

一,引言 我们知道,在实际生活中,采集到的数据大部分信息都是无用的噪声和冗余信息,那么,我们如何才能剔除掉这些噪声和无用的信息,只保留包含绝大部分重要信息的数据特征呢? 除了上次降到的PCA方法,本次介绍另外一种方法,即SVD.SVD可以用于简化数据,提取出数据的重要特征,而剔除掉数据中的噪声和冗余信息.SVD在现实中可以应用于推荐系统用于提升性能,也可以用于图像压缩,节省内存. 二,利用python事先SVD 1 svd原理--矩阵分解   在很多情况下,数据中的一小段携带了数据集的大部分信息