EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

大数据分析-05-数据降维

降维(Dimensionality Reduction)

我们假设数据能够在低维空间被表示

高维数据在低维空间的表示是更加高效的。

SVD 示例

r 表示保留的特征值的数量

压缩/降低尺寸

  1. 106行,103列,不更新
  2. 随机访问一行数据,很少的错误时可以接受的

如下的矩阵其实是个二维矩阵,我们通过缩放 [1,1,1,0,0][0,0,0,1,1] 可以重建所有的行。

矩阵的秩

  1. 什么是矩阵 A 的秩?A 的线性独立列数
  2. 例子:
A=[121131350] Rank(A)=2

秩是可以降维

我们可以通过 [1,2,1][2,3,1] 两个向量来重写矩阵 A,A 的新坐标为:[1,0][0,1][1,1]

降维的目的

  1. 数学上是发现数据中的轴
  2. 发现隐藏的联系和主题:比如经常一同出现的单词等
  3. 移除相似和噪声特征:并不是所有单词都是有用的
  4. 数据解释和可视化
  5. 更容易处理和存储数据:(找到规律,压缩数据量)

降维的描述

与用两个坐标表示每一个点不同,我们用轴上的坐标表示每一个点(对应红线上点的位置)。

通过这样做,我们会产生一些错误,因为这些点并不完全在直线上(信息损失),需要我们考虑我们是否可以接受这部分信息损失。

SVD

奇异值的值必然为正

SVD 的分类

标准 SVD(无失真) 近似 SVD

SVD 的介绍

变量(维数)较多,增加了分析问题的复杂性。

数据丰富但知识贫乏:实际问题中,变量之间可能存在一定的相关,因此,多变量中可能存在资讯的重叠。

人们自然希望通过克服相关、重叠性,用较少的变量来代替原来多的变量,而这种代替可以反映原来多个变量的大部分资讯,这实际上是一种“降维”的思想。

降维方法汇总

特征值与特征向量

  1. An 阶矩阵,如果数 λ 和 n 维非零列向量使关系式Ax=λx成立
  2. 则称λ是方阵 A 的特征值,非零向量 x 称为 A 的对应特征值的特征向量。
  3. 一般求解方法
|AλI|=0|a11a12...a1na21a22...a2n......an1an2...ann|=0

降维方法

  1. PCA(主成分分析,Principal-Component Analysis)
  2. LDA(线性判别分析)
  3. 因子分析
  4. SVD(奇异值分解,Singular-Value Decomposition)
  5. CUR 分解

SVD(奇异值分解,Singular-Value Decomposition)

A[mn]=U[mr]Σ[rr](V[nr])T
矩阵符号 矩阵名称 矩阵描述
A 输入数据矩阵 m * n 维
U 左奇异矩阵 m * r 维,正交矩阵,UUT=I
Σ 奇异值对角矩阵 r * r 维,r 是矩阵 A 的秩,只有对角线上有值,其他元素均为 0
V 右奇异矩阵 n * r 维,正交矩阵,VTV=I

Notes:奇异值分解的信息下降是非常快的,基本上前 100 个奇异值就可以表征大多数的数据。

SVD 图示

奇异值求解

(1-1)AAT=UΣVTVΣTUT=UΣΣTUT(1-2)ATA=VΣUTUΣVT=VΣTΣVT

我们通过简单分析可以知道 AATATA 是对称矩阵

  1. 我们利用上面的(1-1)式来进行特征值分解,得到的特征矩阵就是 U
  2. 通过上面的(1-2)式来进行特征值分解,得到的特征矩阵就是 V
  3. ΣΣT 或者 ΣTΣ 中的特征值开方,可以获得所有的奇异值

SVD 计算示例

A=[011110] AT=[011110]

求解特征值要从大到小排列

矩阵名 矩阵值 特征值 特征矩阵
U U=AAT=[110120011] λ1=3,u1=(16,26,16)T
λ2=1,u2=(12,0,12)T
λ3=0,u3=(13,13,13)T
[16121326013161213]
V V=ATA=(2112) λ1=3,v1=(12,12)T
λ2=1,v2=(12,12)T
[12121212]

求解奇异值为:3 和 1

SVD 的性质

我们通常可以将一个实数矩阵 A 按照分解为A=UΣVT

  1. U,Σ,V:唯一
  2. U,V:列正交
    1. UTU=I,VTV=I,I 是单位矩阵
    2. 列是正交单位向量
  3. Σ:对角矩阵:对角值(奇异值)为正,并以降序排列

SVD 的例子的解释(Users to Movies)

  • U:“User to Concept”相似度矩阵
    • 第一列:SciFi-concept
    • 第二列:Romance-concept
  • Σ
    • 第一对角值:“strength” of the SciFi-concept
    • 对角值:“strength” of each concept
  • V:“movie-to-concept”相似度矩阵

SVD 的向量理解

  1. 不使用二维(x, y)来描述一个点,而是使用一个点 z 来描述这个点。
  2. 点的位置是在向量 v1 上的
  3. 如何选择 v1:最小化 reconstruction errors(我们选择使用欧氏距离)

最小化 reconstruction errors

SVD 目标:最小化 reconstruction errors

i=1Nj=1D||xijzij||20

如何被认为是没有了,下降结束了?设置最小的奇异值为 0

  1. 得到 SVD 后的近似矩阵(将最小的奇异值设置为 0 和 U、V 中对应的行和列置为 0,重新做乘法得到新的矩阵)

SVD 向量理解例子:Users to Movies

SVD - 最低秩近似

定理:如果 A=UΣVT 并且 B=USVT,并且 S 是一个对角 r * r 的矩阵,并且 si=δi(i=1...k),并且其他的 si=0,那么 B 是 A 的最合适的近似矩阵,并且 rank(B)=k

  1. 什么是最好?B 在rank(B)=k的时候是minB||AB||F的解
  2. ||AB||F=ij(AijBij)2

引理

  1. ||M||F=i(qii)2 当 M = P Q R 是 M 的 SVD 的时候
  2. UΣVTUSVT=U(ΣS)VT

引理的证明

M=ij(mij)2=ij(klpikqklrlj)2M=ijklnmpikqklrljpinqnmrmj
  • ipikpin 是 1,如果 k=n,不然为 0
  • P 是列正交矩阵,R 是正交矩阵,Q 是对角矩阵
A=UΣVT,B=USVTminB,rank(B)=K||AB||F=min||ΣS||F=minsii=1r(δisi)2
  • 我们想要的是最小化 minsii=1r(θisi)2
  • 解决方案就是令 si=δi(i=1...k) 并且其他 si=0
minsii=1k(δisi)2+i=k+1rδ2=i=k+1rδ2

定理的说明

为什么将 δi 设置为 0 是正确的做法?

  • 向量 uivi 是单位长度,所以 δi 是用来调整他们的
  • 所以让 δi 成为 0 可以导致更少的损失

我们应该保持多少 δs,拇指原则:iδi2 的和在 80%-90%,保证信息损失不太多

SVD 算法的复杂度

  1. 计算 SVD 的复杂度min(O(nm2),O(n2m))
  2. 但是如果我们只想知道奇异值或者前 k 个奇异值,或者矩阵是稀疏矩阵,那么复杂度会大大下降

SVD 和特征分解的关系

SVD 角度:A=UΣVT

特征分解的角度:A=XΛXT

  1. A 是对称的
  2. U,V,X 都是正交矩阵
  3. Λ,Σ 都是对角的
AAT=UΣVT(UΣVT)T=UΣVT(VΣTUT)=UΣΣTUT(XΛ2XT)ATA=V(ΣTUT)(UΣVT)=VΣΣTVT(XΛ2XT)

案例:如何查询

查找类似这个矩阵的用户:将查询映射到“概念空间”中-怎么做?

  1. user q:qconcept=qV
  2. user d:dconcept=dV

观察:被评级为“Alien”,“Serenity”的用户 d 与被评级为“Matrix”的用户 q 相似,尽管 d 和 q 的共同点为零!

SVD 的效果

CUR 分解

目标:将矩阵 A 解释为 C,U,R,使得 ||ACUR||F 最小

选择行和列的方式

  1. 尽管我们是随机的选择行和列,但是我们还是保留了对于重要的行和列的权重
  2. 行和列的权重计算:f=i,jaij2
  3. 我们按照概率 pi=jaij2f 选择行
  4. 我们按照概率 qj=iaij2f
  5. 归一化处理:将所有的元素都是除以 rqj(行)、rpi(列)

CUR 对列(行)进行取样

以列为例,行也是相似的

输入:矩阵 ARmn,样例数 c

输出:CdRmc

算法过程:

  1. 对于 x[1,n]P(x)=iA(i,x)2i,jA(i,j)2
  2. 对于 i[1,c],以一列为例
    1. 选择 k[1,n] 满足分布 P(x)
    2. 计算 Cd(:,i)=A(:,k)cP(k)=A(:,k)ciA(i,k)2i,jA(i,j)2

请注意,这是一种随机算法,同一列可以多次采样

计算 U

U 是一个 rr 的矩阵,所以是比较小的,并且如果他是高密度、难计算的也是可以的。

首先计算 W,我们让 W 是列 C 和行 R 的交集,并且计算出 W 的 SVD 表示为 W=XΣYT

然后计算 Σ 的 Moore-Penorse inverse(伪逆矩阵):Σ

  1. Σ 是一个对角矩阵
  2. 他的 Moore-Penorse inverse 满足:
    1. 1σ 如果 σ0
    2. 0 如果 σ=0

然后:U=W+=Y(Σ+)2XT

  1. 非零奇异值的倒数:Σii+=1/Σii
  2. W+ 是伪逆

为什么伪逆是有效的

W=XΣYW1=X1Σ1Y1X1=XT,Y1=YTΣ1=1Σii
  • X、Y 正交矩阵,Σ 是对角矩阵
  • 因此,如果 W 是非奇异矩阵,伪逆矩阵是真的逆矩阵

CUR 是可以被证明是 SVD 的一个很好近似

CUR 的优点和缺点

优点

  1. 很好计算:由于基向量是实际的列和行
  2. 稀疏矩阵:由于基向量是实际的列和行

缺点

  1. 重复的列和行:大量的列将被多次采样

如何避免重复

  1. 方案一:直接抛弃
  2. 方法二:用重复项的平方根缩放(乘)列/行

SVD 和 CUR

简单的实验

DBLP bibliographic data

  1. Author-to-conference 的大稀疏矩阵
  2. Aij:作者 i 在会议 j 上发表的论文数量
  3. 428k 个作者(列),3659 会议(行)
  4. 非常稀疏

DBLP 的结果

线性假设

SVD 只能用于线性投影:低维线性投影,保持欧式距离

非线性方法:Isomap

  1. 数据位于一个低维的非线性曲线
  2. 使用距离度量对应的形状