SVD矩阵分解

本文探讨了矩阵分解在处理大规模稀疏数据中的重要性。通过基变换和特征值分解,矩阵可以被简化,提取主要信息。SVD(奇异值分解)解决了非方阵的分解问题,通过选取前k个最大特征值,实现数据的降维表示,保留关键信息,降低计算复杂性。矩阵分解在电商等领域的用户商品交互数据中,有助于发现用户行为模式和推荐系统构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要对矩阵进行分解

原始的矩阵表示数据最完整的信息,分解完之后,信息不就不完整了吗?为什么要做矩阵分解?

假如有一批电商数据,有一些用户购买了一些商品,假设100万用户,10万个商品。用矩阵表示则有100万*10万的维度 ,这是一个很大的矩阵,同时也是一个稀疏的矩阵,因为每个用户不能买所有的商品。这么庞大的矩阵中,我们也无法提取出重点信息。

因此将这个大矩阵分解成多个小矩阵相乘。

基变换

基是正交的(即内积为0,或者直观说相互垂直),并且基是线性无关的。假设如果y轴和x轴不是正交的,也就是不是垂直,夹角小于90度,意味着y可以由x来表示,x也可以由y来表示。

当y与x垂直时,y无法表示x,x也无法表示y

我们不希望一个指标可以由另一个指标来表示。一旦可以这么表示,那么另一个指标存在的意义就不大了。

变换:数据与一个基做内积运算,结果作为第一个新的坐标分量,然后与第二个基做内积运算,结果作为第二个新坐标的分量。

特征值分解

矩阵里面有很多信息,来分一分, A=UΛU−1A=U \Lambda U^{-1}A=UΛU1,其中UUU表示特征向量矩阵,Λ\LambdaΛ表示特征值矩阵。AAA必须是n*n的方阵,且有n个线性无关的特征向量。

这时我们就可以在对角矩阵当中找到比较大的了,他们就代表了主要信息。

SVD矩阵分解

上面提到的特征值分解不是挺好的吗?但是它被限制住了,如果矩阵的形状不是n*n的呢?而是m*n的形状呢?

这时就需要使用SVD矩阵分解了。

首先选前k个的特征值(一般前10%的特征值的和就占了总体的90%)。Am∗n=Um∗kΛk∗kVk∗nA_{m*n}=U_{m*k}\Lambda_{k*k}V_{k*n}Amn=UmkΛkkVkn,这样就可以得到一个近似的矩阵,这个矩阵拥有与原矩阵差不多的信息,但是大小却少了很多。

SVD推导

前提:对于一个二维矩阵M可以找到一组标准正交基v1v_1v1v2v_2v2使得Mv1Mv_1Mv1Mv2Mv_2Mv2是正交的。
在这里插入图片描述
使用另一组正交基u1u_1u1u2u_2u2来表示Mv1Mv_1Mv1Mv2Mv_2Mv2的方向。

其长度分别为:∣Mv1∣=σ1|Mv_1|=\sigma_1Mv1=σ1,∣Mv2∣=σ2|Mv_2|=\sigma_2Mv2=σ2,可得: Mv1=σ1u1,Mv2=σ2u2Mv_1=\sigma_1u_1,Mv_2=\sigma_2u_2Mv1=σ1u1,Mv2=σ2u2

对于向量xxx在这组基中的表示:x=(v1⋅x)v1+(v2⋅x)v2x=(v_1 · x)v_1 + (v_2·x)v_2x=(v1x)v1+(v2x)v2,其中(v1⋅x)(v_1 · x)(v1x)表示向量的点积,点积表示投影的长度,可以通过投影到基的长度乘以基的方向来表示一个点的坐标。点积v⋅xv·xvx也可以转换成行向量乘列向量 v⋅x=vTxv·x=v^Txvx=vTx

可得Mx=(v1⋅x)Mv1+(v2⋅x)Mv2,Mx=(v1⋅x)σ1u1+(v2⋅x)σ2u2Mx=(v_1·x)Mv_1 + (v_2·x)Mv_2,Mx=(v_1·x)\sigma_1u_1+(v_2·x)\sigma_2u_2Mx=(v1x)Mv1+(v2x)Mv2Mx=(v1x)σ1u1+(v2x)σ2u2,从而得到:Mx=u1σ1v1Tx+u2σ2v2Tx,M=u1σ1V1T+u2σ2v2TMx=u_1\sigma_1v_1^Tx+u_2\sigma_2v_2^Tx,M=u_1\sigma_1V_1^T+u_2\sigma_2v_2^TMx=u1σ1v1Tx+u2σ2v2TxM=u1σ1V1T+u2σ2v2T,化简得到:M=U∑VTM=U\sum V^TM=UVT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值