一 SVD的数学模型
设有样本数据X=(xij)n∗p;i=1...p,j=1...n,∀xij∈RX=(x_{ij})_{n*p}; i=1...p,j=1...n ,\forall{x_{ij}}\in \mathbb RX=(xij)n∗p;i=1...p,j=1...n,∀xij∈R ; nnn为样本数,ppp是样本的观察指标数目。将样本数据中的一行也就是一个观察样本看成是P维空间的一个点,nnn个样本也就是P维空间中的nnn点.
矩阵XXX有如下分解:X=UΣVtX=U\Sigma V^tX=UΣVt,其中U∈Rn∗nU \in R^{n*n}U∈Rn∗n,V∈Rp∗pV\in R^{p*p}V∈Rp∗p,$\Sigma \in R^{n*p},v_{ij}=0 , \forall{ i\neq j } ,并且,并且,并且S, D$均为正交阵。
1.1 SVD与PCA的关系
事实上,只要找到H=XtXH=X^{t}XH=XtX的特征向量矩阵V,令Y=X∗VY=X*VY=X∗V,则有YtY=ΛY^tY=\LambdaYtY=Λ, Λ\LambdaΛ的非对角线元素全为零,即Y个各列之间正交,只需要将Y的每列进行单位化就可以得到单位正交阵的p个列,补齐其余n-p列得到单位正交阵UUU,即Y=UΣY=U\SigmaY=UΣ,因此有X=UΣVtX=U\Sigma V^tX=UΣVt成立。
首先,令 H=Xt∗XH=X^t*XH=Xt∗X,根据SVD分解,有H=UΣtVtVΣUt=UΣtΣUt=UtΛUH=U\Sigma^t V^tV\Sigma U^t=U\Sigma^t \Sigma U^t=U^t\Lambda UH=UΣtVtVΣUt=UΣtΣUt=UtΛU。可见,U是H的特征向量矩阵,特征值为λi=σii2\lambda _{i}=\sigma_{ii}^2λi=σii2。
其次,令 H∗=X∗XtH^*=X*X^tH∗=X∗Xt,根据SVD分解,有H=VΣΣtVt=VtΛ∗VH=V\Sigma \Sigma^t V^t=V^t\Lambda^* VH=VΣΣtVt=VtΛ∗V。可见,V是H∗H^*H∗的特征向量矩阵,特征值根为λi∗=σii2\lambda _{i}^*=\sigma_{ii}^2λi∗=σii2。
由此知道任意的实数矩阵XXX, 对称阵X∗Xt,Xt∗XX*X^t,X^t*XX∗Xt,Xt∗X有相同的非零特征值,他们的特征向量矩阵,对应于SVD分解的U和V。
1.2 最优化方法看SVD
用u⃗,v⃗,λ\vec u ,\vec v,\lambdau,v,λ逼近XXX,建立如下最优化方法:
min(Q(X,u⃗,v⃗,λ))=min(∑i=1n∑j=1p(xij−λuivj)2)st.{∑i=1nui2=1∑j=1pvi2=1min( Q(X,\vec u ,\vec v,\lambda))=min( \sum_{i=1}^n \sum_{j=1}^p(x_{ij}-\lambda u_i v_j)^2) \\
st.
\begin{cases}
\sum_{i=1}^n u_i^2 &=1\\
\\
\sum_{j=1}^p v_i^2 & =1
\end{cases}
min(Q(X,u,v,λ))=min(i=1∑nj=1∑p(xij−λuivj)2)st.⎩⎪⎨⎪⎧∑i=1nui2∑j=1pvi2=1=1
运用拉格朗日方法,可以得到下面的方程组:
{u⃗tXv⃗=λXv⃗=λu⃗(1)Xtu⃗=λv⃗
\begin{cases}
\vec u^t X \vec v & =\lambda\\
X \vec v & =\lambda \vec u & & & & (1) \\
X ^t\vec u &=\lambda \vec v
\end{cases}
⎩⎪⎨⎪⎧utXvXvXtu=λ=λu=λv(1)
由(1)可以得到,$XX ^t\vec u =\lambda X\vec v =\lambda^2 \vec u KaTeX parse error: Expected 'EOF', got '&' at position 2: ,&̲nbsp; 容易看到 \vec u是是是XX ^t$的特征向量。
假设有两组解满足(1)式,分别为(u⃗1,v⃗1,λ1),(u⃗2,v⃗2,λ2)(\vec u _1,\vec v_1,\lambda_1),(\vec u _2,\vec v_2,\lambda_2)(u1,v1,λ1),(u2,v2,λ2),且有λ12≠λ22\lambda_1^2 \neq \lambda_2^2λ12̸=λ22则有:
u⃗1tXXtu⃗2=λ12u⃗1tu⃗2=λ22u⃗1tu⃗2\vec u _1^t XX ^t \vec u _2=\lambda_1^2 \vec u _1^t\vec u _2= \lambda_2^2 \vec u _1^t\vec u _2u1tXXtu2=λ12u1tu2=λ22u1tu2,则必有u⃗1tu⃗2=0\vec u _1^t\vec u _2=0u1tu2=0,同理还有v⃗1tv⃗2=0\vec v_1^t\vec v_2=0v1tv2=0
满足(1)式的所有解,构成了X的SVD分解。
1.3 SVD分解算法
事实上(1)给出了一个迭代算法求解SVD;基本步骤如下:
-
初始化v⃗=(1,1,…,1)t\vec v=(1,1,…,1)^tv=(1,1,…,1)t, λ1=0\lambda_1=0λ1=0,指定一个比较小的数值e,e>0e,e>0e,e>0
-
计算Xv⃗=u⃗′X \vec v =\vec u'Xv=u′, u⃗=u⃗′/∣u⃗′∣\vec u ={\vec u'}/{|\vec u'|}u=u′/∣u′∣
-
计算v⃗′=Xtu⃗\vec v'=X^t\vec uv′=Xtu, λ2=∣v⃗′∣\lambda_2={|\vec v'|}λ2=∣v′∣, v⃗=v⃗′/λ2\vec v ={\vec v'}/\lambda_2v=v′/λ2
-
计算 判断∣λ2−λ1∣<e|\lambda_2-\lambda_1|<e∣λ2−λ1∣<e,为真,返回(λ2,u⃗,v⃗)(\lambda_2,\vec u,\vec v)(λ2,u,v),否则λ1←λ2\lambda_1 \leftarrow \lambda_2λ1←λ2跳转到第2步。
上面给出的分解SVD算法,只给出了一组解,为了求得剩余的解,只需要将X做如下的变换:X:=X−λ∗u⃗∗v⃗tX:=X-\lambda * \vec u *\vec v^tX:=X−λ∗u∗vt然后按照上面的算法再计算即可,
#####下面验证第二组解满足(1)式:
事实上,假设两轮计算得到了两组解:(λ1,u⃗1,v⃗1),(λ2,u⃗2,v⃗2)(\lambda_1,\vec u_1,\vec v_1),(\lambda_2,\vec u_2,\vec v_2)(λ1,u1,v1),(λ2,u2,v2),先验证若:λ12≠λ22\lambda_1^2 \neq \lambda_2^2λ12̸=λ22有u⃗1,u⃗2\vec u_1,\vec u_2u1,u2正交。
(Xt−λ1∗v⃗1∗u⃗1t)u⃗1=Xtu⃗1−λ1∗v⃗1=0(X^t-\lambda_1 * \vec v_1*\vec u_1^t)\vec u_1=X^t\vec u_1-\lambda_1 * \vec v_1=0(Xt−λ1∗v1∗u1t)u1=Xtu1−λ1∗v1=0
所以有:
0=u⃗2t(X−λ1∗u⃗1∗v⃗1t)(Xt−λ1∗v⃗1∗u⃗1t)u⃗1=λ22u⃗2tu⃗10=\vec u_2^t(X-\lambda_1 * \vec u_1 *\vec v_1^t)(X^t-\lambda_1 * \vec v_1*\vec u_1^t)\vec u_1= \lambda_2^2\vec u_2^t\vec u_10=u2t(X−λ1∗u1∗v1t)(Xt−λ1∗v1∗u1t)u1=λ22u2tu1
可见:u⃗2tu⃗1=0\vec u_2^t\vec u_1=0u2tu1=0,同样,还有:v⃗2tv⃗1=0\vec v_2^t\vec v_1=0v2tv1=0,所以有:λ2=u⃗2t(X−λ1∗u⃗1∗v⃗1t)v⃗2=u⃗2tXv⃗2−λ1u⃗2t∗u⃗1∗v⃗1tv⃗2=u⃗2tXv⃗2λ2v⃗2=(X−λ1∗u⃗1∗v⃗1t)tu⃗2=Xtu⃗2λ2u⃗2=(X−λ1∗u⃗1∗v⃗1t)v⃗2=Xv⃗2\lambda_2 =\vec u_2^t(X-\lambda_1 * \vec u_1 *\vec v_1^t)\vec v_2=\vec u_2^tX\vec v_2-\lambda_1\vec u_2^t * \vec u_1 *\vec v_1^t\vec v_2=\vec u_2^tX\vec v_2 \\ \lambda_2 \vec v_2=(X-\lambda_1 * \vec u_1 *\vec v_1^t)^t\vec u_2=X^t\vec u_2\\ \lambda_2 \vec u_2=(X-\lambda_1 * \vec u_1 *\vec v_1^t)\vec v_2=X\vec v_2 λ2=u2t(X−λ1∗u1∗v1t)v2=u2tXv2−λ1u2t∗u1∗v1tv2=u2tXv2λ2v2=(X−λ1∗u1∗v1t)tu2=Xtu2λ2u2=(X−λ1∗u1∗v1t)v2=Xv2
可见:(λ1,u⃗1,v⃗1),(λ2,u⃗2,v⃗2)(\lambda_1,\vec u_1,\vec v_1),(\lambda_2,\vec u_2,\vec v_2)(λ1,u1,v1),(λ2,u2,v2)都是X的SVD分解的特征。
事实上,可以通过计算H=Xt∗XH=X^t*XH=Xt∗X,然后用上面的办法求解H的特征分解,算法可以进一步优化。但是当H或者X数据量特别大的时候,需要进行并行加速。上述算法可以进行并行运算,只需要对X进行分块即可。
二 、SVD的应用
SVD分解的应用十分广泛,在数据压缩,推荐,经济结构分析等等方面,并且在应用方面与因子分析、对应分析方法极为相似。
2.1 数据压缩
在大数据时代,存在大型数值矩阵,比如客户与购买的商品关系矩阵,网名点击网站数据等等,样本数据量为n∗pn*pn∗p,而样本矩阵的秩R(X)=rR(X)=rR(X)=r,则SVD分解之后的去掉零后只剩(n+p+1)∗r(n+p+1)*r(n+p+1)∗r个数据需要存储。这是还是无损压缩。
假设n=100∗105,p=105,r=103n=100*10^5,p=10^5,r=10^3n=100∗105,p=105,r=103,则存储原始数据量为101210^{12}1012,而通过SVD分解后,存储数据量为(100∗105+105+1)∗103≈1010(100*10^5+10^5+1)*10^3 \approx10^{10}(100∗105+105+1)∗103≈1010,所需存储空间缩小两个数量级。
除此之外,参照PCA(主成分分析),可将特征值从大到小排列,取方差和占比前80%的特征分量,还可以进一步压缩数据,降低噪音。
2.2 缺失值估计,商品推荐
在很多时候,X是稀疏矩阵,比如若X的每行代表某人购买不同商品数量或者金额的样本数据。将样本中缺失的数据视为潜在的消费需求,那么估计样本中缺失数据的值,就可以用来做商品推荐。
1.2节中讨论了二乘法逼近样本的最优化方法,并且从中给出了SVD分解的算法,现在稍微修改一下该方法,在此之前定义一个函数:
s(x)={0x=01x≠0s(x)=
\begin{cases}
0 &x=0\\
1 & x\neq0
\end{cases}s(x)={01x=0x̸=0
然后定义极值函数:
min(Q(X,u⃗,v⃗,λ))=min(∑i=1n∑j=1p[s(xij)∗(xij−λuivj)2])st.{∑i=1nui2=1∑j=1pvi2=1min( Q(X,\vec u ,\vec v,\lambda))=min( \sum_{i=1}^n \sum_{j=1}^p[s(x_{ij})*(x_{ij}-\lambda u_i v_j)^2] ) \\
st.
\begin{cases}
\sum_{i=1}^n u_i^2 &=1\\
\\
\sum_{j=1}^p v_i^2 & =1
\end{cases}
min(Q(X,u,v,λ))=min(i=1∑nj=1∑p[s(xij)∗(xij−λuivj)2])st.⎩⎪⎨⎪⎧∑i=1nui2∑j=1pvi2=1=1
极小化目标函数Q(X,u⃗,v⃗,λ)Q(X,\vec u ,\vec v,\lambda)Q(X,u,v,λ),可以得到一组解(λ,u⃗,v⃗)(\lambda,\vec u,\vec v)(λ,u,v),具体求解算法类似于 1.2节中介绍的SVD
分解的迭代算法,对于某个缺失值xijx_{ij}xij,只需要计算λuivj\lambda u_iv_jλuivj,就估计得到某人对某种商品的潜在需求,从而进行推荐。
2.3 代替因子分析和对应分析
未加指明时默认SVD分解中V的对角线元素是是左上到右下,按照元素平方从大到小排列的。
假定大家熟悉因子分析(不懂的自行补脑_),因子分析分为R型因子分析和Q型因子分析,对于同一组样本,将两种分析结合起来,就是对应分析。
2.3.1 简单介绍因子分析模型
因子分析主要思想是将观测指标或者观测样本视为某些隐藏的因素叠加而来的。比如样本矩阵X的p个指标,分别记为x⃗i,i=1..p\vec x_i,i=1..pxi,i=1..p,x⃗i\vec x_ixi是X的第i列。假设有r个隐藏因子记为Fj,j=1..rF_j,j=1..rFj,j=1..r,建立如下模型:
x⃗i=ui+aik∗Fk+ei,∀i=1...p,k=1...r,ei∼N(0,ε),∑i=1paik2=1\vec x_i=u_i+a_{ik}*F_k+e_i,\forall i=1...p,k=1...r,e_i \sim N(0,\varepsilon),\sum_{i=1}^pa_{ik}^2=1xi=ui+aik∗Fk+ei,∀i=1...p,k=1...r,ei∼N(0,ε),i=1∑paik2=1
eie_iei噪音,aija_{ij}aij是指标x⃗i\vec x_{i}xi在隐藏因子FjF_jFj上的得分,并且要求cov(Fi,Fj)=0,∀i≠jcov(F_i,F_j)=0, \forall i\neq jcov(Fi,Fj)=0,∀i̸=j。
表述成矩阵形式,就有:
X=(x⃗1,x⃗2,...,x⃗p)=U+(F1,F2,...,Fr)∗A+e=U+F∗A+e,A∈Rr∗pX=(\vec x_1,\vec x_2,...,\vec x_p)=U+(F_1,F_2,...,F_r)*A+\mathbb e=U+\mathbb F*A+\mathbb e,A\in R^{r*p} X=(x1,x2,...,xp)=U+(F1,F2,...,Fr)∗A+e=U+F∗A+e,A∈Rr∗p
2.3.2 对比因子分析模型与SVD模型
对照这个模型,重新审视SVD,假定X的值为k,选择rrr满足r<kr<kr<k。记u⃗i,i=1...k\vec u_i,i=1...kui,i=1...k,u⃗i\vec u_iui是U的第i列,对应v⃗i,i=1...k\vec v_i,i=1...kvi,i=1...k,v⃗it\vec v_i^tvit是V的第i列,$ \sigma_{i},i=1…k,,, \sigma_i是是是 \Sigma的第i个对角线元素。重新用普分解的方式可以将X表示为的第i个对角线元素。重新用普分解的方式可以将X表示为的第i个对角线元素。重新用普分解的方式可以将X表示为X=∑i=1kσiu⃗i∗v⃗it=∑i=1rσiu⃗i∗v⃗it+∑i=r+1kσiu⃗i∗v⃗itX=\sum_{i=1}^k \sigma_i\vec u_i*\vec v_i^t=\sum_{i=1}^r \sigma_i\vec u_i*\vec v_i^t+\sum_{i=r+1}^k \sigma_i\vec u_i*\vec v_i^tX=∑i=1kσiui∗vit=∑i=1rσiui∗vit+∑i=r+1kσiui∗vit$
设e=∑i=r+1kσiu⃗i∗v⃗it\mathbb e=\sum_{i=r+1}^k \sigma_i\vec u_i*\vec v_i^te=∑i=r+1kσiui∗vit,
对照R型因子分析,记F=(σ1u⃗1,σ2u⃗2,...,σru⃗r)=S′V′\mathbb F=(\sigma_1\vec u_1,\sigma_2\vec u_2,...,\sigma_r\vec u_r)=S'V'F=(σ1u1,σ2u2,...,σrur)=S′V′;
模型比较总结如下:
记A=V^t=(v⃗1,v⃗2,...v⃗r)tA=\hat V^t=(\vec v_1,\vec v_2,...\vec v_r)^tA=V^t=(v1,v2,...vr)t,有F∗A=∑i=1rσiu⃗i∗v⃗it\mathbb F*A=\sum_{i=1}^r \sigma_i\vec u_i*\vec v_i^tF∗A=∑i=1rσiui∗vit,有X=F∗A+eX=\mathbb F* A+\mathbb eX=F∗A+e,于是:
1、对应于因子分析中的因子得分∑i=1paik2=1\sum_{i=1}^pa_{ik}^2=1∑i=1paik2=1,有v⃗it∗v⃗i=1\vec v_i^t*\vec v_i=1vit∗vi=1;
2、对应于因子分析中的cov(Fi,Fj)=0cov(F_i,F_j)=0cov(Fi,Fj)=0,有 σiσju⃗it∗u⃗j={0ifi≠jui2ifi=j \sigma_i \sigma_j\vec u_i^t*\vec u_j=\begin{cases}0 & if & i\neq j\\u_i^2 & if & i=j\end{cases}σiσjuit∗uj={0ui2ififi̸=ji=j
3、对应于ei∼N(0,ε)e_i \sim N(0,\varepsilon)ei∼N(0,ε),有(∑i=r+1kσiu⃗i)t∗(∑i=r+1kσiu⃗i)=∑i=r+1kσi2=ε(\sum_{i=r+1}^k \sigma_i\vec u_i)^t*(\sum_{i=r+1}^k \sigma _i\vec u_i)=\sum_{i=r+1}^k\sigma_i^2=\varepsilon(∑i=r+1kσiui)t∗(∑i=r+1kσiui)=∑i=r+1kσi2=ε
2.3.3分析总结
1. 可以看出,除了中心化的要求外,SVD分解与因子分析严格对应,而且SVD集R型和Q型分析两种分析于一体,是接近于对应分析的一种分析方案。
2. 更进一步,参照普分解理论,参考因子分析,对于某个样本的某个指标值xijx_{ij}xij,可以将SVD解理为:xij=∑k=1rσkuik∗vkj+εij,∀i=1...n,j=1..px_{ij}=\sum_{k=1}^r\sigma _ku_{ik}*v_{kj}+\varepsilon_{ij},\forall i=1...n,j=1..pxij=k=1∑rσkuik∗vkj+εij,∀i=1...n,j=1..p
- σk\sigma _kσk代表第k个隐藏因子的对指标得分的基准权重;uiku_{ik}uik代表第i个样本值对应第k个因子的得分;vkjv_{kj}vkj代表第j个指标对应第k个因子的得分,绝对值较小特征值代表的隐藏因子视为噪音。
5344

被折叠的 条评论
为什么被折叠?



