奇异值

SVD 奇异值分解与word embedding

血红的双手。 提交于 2020-02-29 22:21:35
在研究NLP的过程中,遇到了word embedding, 经过一系列学习,发现它最初的原理之一来自奇异值分解。于是对奇异值分解做一个简单的记录。 资料中比较好的资料: https://www.cnblogs.com/endlesscoding/p/10033527.html 原理讲解简单,demo做的十分好! https://www.cnblogs.com/litaotao-doctor/p/5320521.html 这篇把特征值和奇异值放在一起讲,十分到位。 看完上面的资料后,我觉得自己没必要记录公式原理了,自惭形秽。好,下面开始: SVD: Sigular Value Decomposition 个人认为奇异值和特征值应该可以有相同的理解,这里我们先谈特征值: 特征值的定义为对矩阵A存在特征值 λ,特征向量x,使下式成立: 而对A的所有特征值,我们称为A的谱,记为λ(A)。 那么我们该如何理解这个式子? 有几个相关的关系可以给我们参考:矩阵A的秩不小于A的非零特征值数;如果矩阵A不满秩,则一定存在0特征值;若矩阵A可对角化,则rankA = A的非零特征值数。 也就是说 矩阵的特征值与矩阵的线性相关性是有关系的。 则我们对特征值的理解可以为: 任意矩阵A对向量x的矩阵乘法,可以理解为对x向量的表换(旋转、平移、缩放),那么Ax可以理解为一次表换,而特征值λ与x的相乘

奇异值分解(SVD)

∥☆過路亽.° 提交于 2020-02-28 07:33:44
SVD计算方法 A = U ∑ V T A=U\sum V^T A = U ∑ V T 若 A A A 的大小为 m ∗ n m*n m ∗ n ,则 U U U 的大小为 m ∗ m m*m m ∗ m , V V V 的大小为 n ∗ n n*n n ∗ n , ∑ \sum ∑ 的大小为 m ∗ n m*n m ∗ n .U为 A A T AA^T A A T 特征值对应的特征向量, V V V 为 A T A A^TA A T A 的特征值对应的特征向量。 ∑ \sum ∑ 中对角线元素为奇异值( A A T AA^T A A T 的特征值值开根号,然后按从大到小排序,同时 U 和 V U和V U 和 V 中的特征向量也按这个顺序排列)。 在matlab中有奇异值分解的函数,我们可以直接使用。当然你也可以自己写。 应用 1.图片压缩 我们可以对图像矩阵进行奇异值分解,然后使用数值较大的几个奇异值以及对应的奇异向量去表示图像,这样可以减少存储图像所需的空间。 来源: CSDN 作者: KingKong. 链接: https://blog.csdn.net/weixin_43221105/article/details/102750540

转:奇异值分解与特征值分解

偶尔善良 提交于 2020-01-29 04:31:44
文章摘自: http://blog.jobbole.com/88208/ 一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 1) 特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 它其实对应的线性变换是下面的形式: 因为这个矩阵M乘以一个向量(x,y)的结果是: 上面的矩阵是对称的,所以这个变换是一个对x,y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子: 它所描述的变换是下面的样子: 这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最 主要的

奇异值分解简要笔记

て烟熏妆下的殇ゞ 提交于 2020-01-18 19:35:43
特征值分解 特征值分解可以看作是换基,线性变换在新基下表现为仅仅是对各个坐标轴做伸缩,然后再换回原来的基。 对称矩阵的特征值分解有更好的性质,它可以保证新基是标准正交基。 对称矩阵 正交对角化 对称矩阵有非常好的性质——可以正交对角化。 就是说对称矩阵A可以用特征值和特征向量分解成 A = P D P T A=PDP^T A = P D P T 的形式。 其中D是对角矩阵,对角线上是A的特征值。P的列向量是A的标准正交基。 这个形式很好,P是正交矩阵,对应是正交变换。正交变换保留了内积,所以也就保留了角度和距离。这在分类和聚类里面都是很重要的,因为衡量两个向量相似度就是用角度或者距离。 正交变换从几何上看就是旋转(或者旋转加镜面反转)。 谱分解 P的列是一组标准正交基: P = [ u 1 , ⋯   , u n ] P = [\mathbf{u}_1, \cdots , \mathbf{u}_n] P = [ u 1 ​ , ⋯ , u n ​ ] 那么A可以分解成n个矩阵的和: A = λ 1 u 1 u 1 T + λ 2 u 2 u 2 T + ⋯ + λ n u n u n T A=\lambda_1 \mathbf{u}_1 \mathbf{u}_1^T + \lambda_2 \mathbf{u}_2 \mathbf{u}_2^T + \cdots + \lambda

特征值分解与奇异值分解

佐手、 提交于 2020-01-13 16:50:11
https://www.cnblogs.com/fuleying/p/4466326.html 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。 1. 特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 写成矩阵形式: 这时候λ就被称为特征向量v对应的特征值, 一个矩阵的一组特征向量是一组正交向量 。 2. 特征分解: 特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵, 正交矩阵是可逆的。 Σ = diag(λ 1 , λ 2 , ..., λ n )是一个对角阵,每一个对角线上的元素就是一个特征值。 首先,要明确的是, 一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。   当矩阵是高维的情况下,那么这个矩阵就是高维空间下的一个线性变换,这个线性变化可能没法通过图片来表示,但是可以想象,这个变换也同样有很多的变换方向, 我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变化方向。 我们利用这前N个变化方向,就可以近似这个矩阵(变换)。也就是之前说的: 提取这个矩阵最重要的特征。 总结一下,特征值分解可以得到特征值与特征向量,

SVD分解技术详解

时光总嘲笑我的痴心妄想 提交于 2019-12-25 15:58:11
版权声明: 本文由LeftNotEasy发布于 http://leftnoteasy.cnblogs.com , 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系 wheeleast@gmail.com 前言: 上一次写了关于 PCA与LDA 的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的。在上篇文章中便是基于特征值分解的一种解释。特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中。而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有关的应用背景。奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。 在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Semantic

奇异值分解(SVD)原理及应用

若如初见. 提交于 2019-12-23 13:45:11
一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 1)特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 它其实对应的线性变换是下面的形式: 因为这个矩阵M乘以一个向量(x,y)的结果是: 上面的矩阵是对称的,所以这个变换是一个对x,y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子: 它所描述的变换是下面的样子:   这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变化方向(变化方向可能有不止一个),如果我们想要描述好一个变换

奇异值分解SVD

可紊 提交于 2019-12-13 00:45:46
在介绍奇异值分解(SVD)之前我们先来回顾一下关于矩阵的一些基础知识。 矩阵基础知识 方阵 给定一个$ n×m $的矩阵$ A $,若n和m相等也就是矩阵的行和列相等那矩阵$ A $就是一个方阵。 单位矩阵 在线性代数中,n阶单位矩阵,是一个$ n×n $的方阵,其主对角线元素为1,其余元素为0。单位矩阵以$ mathbf { I } _ { n } $表示。 单位矩阵性质: $$ text { 1. } I _ { n } B _ { n times m } = B _ { n times m } $$ $$ text { 2. } B _ { n times m } I _ { m } = B _ { n times m } $$ $$ text { 3. } A _ { n } I _ { n } = I _ { n } A _ { n } = A _ { n } $$ $$ text { 4. } I _ { n } I _ { n } = I _ { n } $$ 转置 矩阵的转置是最简单的一种矩阵变换。简单来说若$ n×m $的矩阵$ A $的转置为$ A ^ { mathrm { T } } $,则$ A ^ { mathrm { T } } $是一个$ m×n $的矩阵并且有$ mathbf { A } _ { i j } = mathbf { A } _ { j

奇异值分解(SVD)与主成分分析(PCA)

给你一囗甜甜゛ 提交于 2019-12-11 18:14:30
奇异值分解(SVD)与主成分分析(PCA) 1 算法简介 奇异值分解(Singular Value Decomposition),简称SVD,是线性代数中矩阵分解的方法。假如有一个矩阵A,对它进行奇异值分解,可以得到三个矩阵相乘的形式,最左边为m维的正交矩阵,中间为m*n 的对角阵,右边为n维的正交矩阵: A = U Σ V T A=U\Sigma V^{T} A = U Σ V T 这三个矩阵的大小如下图所示: 矩阵 Σ \Sigma Σ 除了对角元素其他元素都为0,并且对角元素是从大到小排列的,前面的元素比较大,后面的很多元素接近0。这些对角元素就是奇异值。( u i u_i u i ​ 为m维行向量, v i v_i v i ​ 为n维行向量) Σ \Sigma Σ 中有n个奇异值,但是由于排在后面的很多接近0,所以我们可以仅保留比较大的前r个奇异值,同时对三个矩阵过滤后面的n-r个奇异值, 奇异值过滤之后,得到新的矩阵: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Y9zuN9s-1576054984887)(./Img/fig2.png)] 在新的矩阵中, Σ \Sigma Σ 只保留了前r个较大的特征值: 实际应用中,我们仅需保留三个比较小的矩阵,就能表示A,不仅节省存储量,在计算的时候更是减少了计算量。SVD在信息检索(隐性语义索引

矩阵特征值分解与奇异值分解含义解析及应用

ぃ、小莉子 提交于 2019-12-06 22:03:10
特征值与特征向量的几何意义 矩阵的乘法是什么,别只告诉我只是“前一个矩阵的行乘以后一个矩阵的列”,还会一点的可能还会说“前一个矩阵的列数等于后一个矩阵的行数才能相乘”,然而,这里却会和你说——那都是表象。 矩阵乘法真正的含义是变换,我们学《线性代数》一开始就学行变换列变换,那才是线代的核心——别会了点猫腻就忘了本——对,矩阵乘法 就是线性变换,若以其中一个向量A为中心,则B的作用主要是使A发生如下变化: 1、伸缩 clf; A = [0, 1, 1, 0, 0;... 1, 1, 0, 0, 1]; % 原空间 B = [3 0; 0 2]; % 线性变换矩阵 plot(A(1,:),A(2,:), '-*');hold on grid on;axis([0 3 0 3]); gtext('变换前'); Y = B * A; plot(Y(1,:),Y(2,:), '-r*'); grid on;axis([0 3 0 3]); gtext('变换后'); 从上图可知,y方向进行了2倍的拉伸,x方向进行了3倍的拉伸,这就是B=[3 0; 0 2]的功劳,3和2就是伸缩比例。请注意,这时B除了对角线元素为各个维度的倍数外,非正对角线元素都为0,因为下面将要看到,对角线元素非0则将会发生切变及旋转的效果。 2、切变 clf; A = [0, 1, 1, 0, 0;... 1, 1, 0