想象一下整理衣橱的感觉。你面前是一个塞满几百件衣服的大柜子,但真正每天在穿的翻来覆去就是那几件:白衬衫、牛仔裤、黑色外套。神奇的是,只要搭配得当,这几件基本款就能复现你日常生活中九成以上的造型。数据世界里藏着同样的秘密:很多看起来巨大的矩阵,真正决定其面貌的独立信息并不多。低秩近似,就是一套把“巨大衣橱”整理成“几件基本款”的数学方法。它会告诉你何时可以用一个小小的矩阵去还原一个庞大的数据矩阵,为什么截断SVD是最优的整理方案,以及这套方法如何在图像压缩、推荐系统和数据去噪中大显身手。读完全文,你会像一位资深整理师,一眼看出数据里哪些信息值得保留,哪些可以大胆丢弃。
掌握低秩近似,等于拿到压缩、去噪与推荐的通用钥匙——无论是给图片瘦身、给推荐系统降维,还是清洗脏数据,都能用同一个数学框架解决。
可视化演示
展示SVD矩阵分解A=UΣV^T、截断SVD保留前k个奇异值实现最优低秩近似(Eckart-Young定理)、以及图像压缩/推荐系统/信号去噪三大应用场景。切换模式查看不同维度。
本节配有交互动效(进入视口后自动加载,约 3KB)。
低秩概念
想象你请了一位整理师来收拾衣橱。表面上看,衣橱里有几百件衣服,眼花缭乱。但整理师会告诉你,这些衣服其实只由几种“核心风格”组成:通勤白衬衫、休闲T恤、运动卫衣。其他衣服不过是这些基本款在颜色、领口、纽扣上的变化。一个看似充满信息的衣橱,真正独立的“样式”并不多——这就是低秩的直觉。
线性代数里,矩阵的“秩”刻画了这种独立信息的数量。一个 \(m\times n\) 的矩阵 \(A\),如果行与行之间、列与列之间高度相关,那么它的秩 \(r\) 就会远远小于 \(m\) 和 \(n\),这样的矩阵称为低秩矩阵。反过来,如果每一行每一列都彼此独立、毫无规律,秩就会接近 \(\min(m,n)\),也就是满秩矩阵。
低秩意味着冗余,而冗余意味着可以被压缩。若 \(A\) 的秩为 \(r\),可以把 \(A\) 写成两个小矩阵的乘积:\(A=BC\),其中 \(B\) 是 \(m\times r\),\(C\) 是 \(r\times n\)。原本要存 \(mn\) 个数,现在只需存 \(r(m+n)\) 个数。\(r\) 越小,省得越多。这个分解正是低秩近似的基石。
当你理解了“秩”这个收藏家的眼光,你就能一眼看出哪件衣服可以舍弃而复得整体风格。矩阵的低秩结构就像衣橱里隐藏的秩序:衣服再多,核心样式有限;数据再大,真正不同的信息可能屈指可数。
- A原始的 \(m\times n\) 矩阵,可以理解成衣橱里全部衣服的详细清单。这个矩阵通常很大,直接存储和处理都很费资源。
- B一个 \(m\times r\) 的“风格因子”矩阵,\(m\) 行对应 \(m\) 件衣服,\(r\) 列对应 \(r\) 种基本风格。它记录每件衣服含有多少每种风格的“成分”。
- C一个 \(r\times n\) 的“风格定义”矩阵,每一行定义一种基本风格如何由原始的 \(n\) 个特征组合而成。
- 乘积 BC\(B\) 和 \(C\) 相乘,把 \(r\) 种风格重新叠加,得到与原 \(A\) 完全相等(或近似)的矩阵。就像用几种基本款,按每件衣服不同的搭配比例,还原出整柜衣物。
SVD分解基础
有了衣橱整理师还不够,她还需要把每种风格“量化”。她拿出一本笔记本,把每件衣服分解成三个信息:这件衣服属于哪几种风格(右奇异向量)、每种风格的强烈程度(奇异值)、以及风格本身如何作用在原始特征上(左奇异向量)。这三份记录合在一起,就是SVD。
SVD(奇异值分解)能把任意矩阵拆成三个矩阵的乘积:\(A=U\Sigma V^{\mathsf{T}}\)。\(U\) 的列称为左奇异向量,是“风格的方向”;\(V\) 的列称为右奇异向量,是“特征的通道”;\(\Sigma\) 是对角阵,对角线上的元素就是奇异值 \(\sigma_i\),代表每一种“风格组合”在整体信息中的分量。\(U\) 和 \(V\) 都是正交矩阵,可以通俗理解为“旋转或镜像变换”,它们保证了分解出来的各个模式互不干扰、长度归一。
正交性让SVD有了非常优雅的展开形式:\(A\) 可以写成一系列秩1矩阵的加权和。每一个 \(\sigma_i u_i v_i^{\mathsf{T}}\) 都像一件“基本款”,奇异值 \(\sigma_i\) 就是这件基本款在整柜衣服中的权重。权重越大,对原矩阵的贡献越强。
整理师的三份记录——\(U\)、\(\Sigma\)、\(V\)——把看似混乱的衣橱变成了清晰的“配方”。无论你的数据是图像、文本还是用户评分,SVD都能把这堆“衣服”拆成整齐叠放的“基本款”。
- A = UΣV^T任意 \(m\times n\) 矩阵都可以分解成三部分。\(U\) 是 \(m\times m\) 正交矩阵,\(V\) 是 \(n\times n\) 正交矩阵,\(\Sigma\) 是非负对角矩阵。
- U列向量 \(u_i\) 是左奇异向量,可看作“风格空间”里的正交坐标轴。矩阵 \(A\) 的列空间由 \(U\) 的前 \(r\) 列张成。
- Σ对角元 \(\sigma_i \ge 0\) 且降序排列,是“强度”或“能量”。\(\sigma_i\) 越大,第 \(i\) 个模式越重要。
- V^T右奇异向量 \(v_i\) 构成 \(A\) 的行空间的基,告诉你每个模式沿哪些原始特征方向起作用。
- 求和形式\(A\) 等于一系列秩1矩阵 \(\sigma_i u_i v_i^{\mathsf{T}}\) 之和。每一项都像一件“基本款”,整个衣橱就是这些基本款的加权组合。
奇异值排序
整理师完成分类后,还有一个重要发现:衣橱里80%的时间你穿的都是那几件最爱的衣服,剩下几百件只是偶尔宠幸一下。奇异值排序正是这种“日常穿着频率”的数学版本。
将奇异值降序排列后,会出现一个典型的经验现象:前几个 \(\sigma_i\) 往往占了总能量的绝大部分。这里的“能量”定义为所有奇异值的平方和。也就是说,少数几个模式就能解释数据中绝大部分的变化,后面的奇异值迅速衰减到接近0。这就像每个衣橱里总有几件穿不坏也穿不腻的“镇柜之宝”。
于是我们得到截断SVD(Truncated SVD):只保留前 \(k\) 个最大的奇异值及其对应的左右奇异向量,其余全部舍弃。这样得到的矩阵 \(A_k\) 存储量只有 \(k(m+n+1)\),却保留了数据的主要结构。\(k\) 的选择就是在“精简”和“还原度”之间取平衡——带几件衣服出门,由你的行程决定。
整理师把“常穿的”和“压箱底的”分开后,你打包行李就不再纠结。截断SVD也一样:它把大矩阵的“必穿单品”挑出来,其余冗余细节留在家里。
- U_k\(U\) 的前 \(k\) 列,是 \(m\times k\) 矩阵,记录每个样本在 \(k\) 个主导模式上的投影。
- Σ_k只保留对角阵 \(\Sigma\) 上前 \(k\) 个最大奇异值,得到 \(k\times k\) 矩阵。
- V_k^T\(V\) 的前 \(k\) 行,是 \(k\times n\) 矩阵,给出 \(k\) 个主导模式在原特征空间的表示。
- 求和式\(A_k\) 只用前 \(k\) 项 \(\sigma_i u_i v_i^{\mathsf{T}}\) 叠加,后 \(\min(m,n)-k\) 项被截断丢弃,就像旅行时只带那几件最常穿的衣服。
Eckart-Young定理
你可能要问:整理师凭什么说这几件是最佳的?如果我非要只带5件衣服出门,有没有可能自己设计一套更实用的“旅行套装”?数学家的回答是:不可能。这就是Eckart-Young定理——在所有“秩不超过 \(k\)”的矩阵里,截断SVD得到的 \(A_k\) 是对原矩阵 \(A\)“最像”的那一个。
衡量“像不像”有两种常用尺子。第一把是Frobenius范数,把两个矩阵每个位置的差平方再求和开根号,反映“整体还原程度”;第二把是谱范数,取两个矩阵之差的最大奇异值,反映“最大偏差有多大”。Eckart-Young定理保证,在这两把尺子下,截断SVD都是全局最优解,而不是“碰巧还不错”的近似。
这个最优性让低秩近似有了坚实的数学保障。应用时我们可以放心地丢掉尾部奇异值,因为已经知道:在同样的参数预算下,没有任何别的低秩矩阵能比截断SVD做得更好。
定理就像一张保证书:如果你决定用5件衣服走天下,整理师搭配出的那5件,是所有5件组合中误差最小的。你不需要另请高明,截断SVD就是那条最优路线。
- rank(B)≤k候选矩阵 \(B\) 的秩不超过 \(k\),意味着 \(B\) 最多只能由 \(k\) 个独立模式组成,就像旅行箱最多装 \(k\) 件衣服。
- Frobenius范数最优值\(\|A-B\|_F\) 是逐元素差的平方和开方,衡量整体还原度。它的最小值等于被丢弃的奇异值平方和开根号。
- 谱范数最优值\(\|A-B\|_2\) 是差值矩阵的最大奇异值,衡量最大偏差。截断后最大偏差恰好是下一个奇异值 \(\sigma_{k+1}\)。
- min(m,n)矩阵 \(A\) 至多有 \(\min(m,n)\) 个非零奇异值,所以被截断的项从 \(k+1\) 数到 \(\min(m,n)\) 为止。
图像压缩
前面铺垫了这么多理论,现在来检验实际效果。一张灰度照片本质上就是一个像素值矩阵:每个像素是一个数字,代表明暗。以经典的低秩近似应用——图像压缩——为例,看整理师如何用“基本款”还原一张照片。
具体流程是:把图片读成 \(m\times n\) 的灰度矩阵 \(A\),对 \(A\) 做SVD分解,保留前 \(k\) 个奇异值得到 \(A_k\),然后用 \(A_k\) 代替原图存储或传输。因为 \(A_k\) 可以分解为 \(U_k\)(\(m\times k\))、\(\Sigma_k\)(\(k\times k\))、\(V_k^{\mathsf{T}}\)(\(k\times n\)),总存储量从 \(mn\) 降到 \(k(m+n+1)\)。当 \(k\) 远小于 \(\min(m,n)\) 时,压缩效果非常可观。
举个例子:一张 \(500\times 400\) 的图,原始存储约20万个数值。若取 \(k=50\),存储量降到 \(50\times(500+400+1)\approx 4.5\) 万,约为原来的22%。丢失的细节主要是高频纹理和噪声,而主体轮廓、明暗梯度都被保留下来。\(k\) 越小文件越模糊,\(k\) 越大越清晰但文件越大。
照片压缩就像把衣橱拍扁进旅行箱——你带走了主导风格(轮廓和主要色块),把琐碎细节(噪点和纹理)留在原地。旅行箱变小了,但照片的“神韵”还在。
- k(m+n+1)截断SVD三个因子 \(U_k,\Sigma_k,V_k^{\mathsf{T}}\) 的元素总数。因为 \(\Sigma_k\) 只有 \(k\) 个非零对角元,实际只需存 \(k\) 个数。
- mn原图像的像素总数,也就是原始矩阵的元素个数。
- 比值这个比值约等于压缩后存储占原来的比例。比值越小,压缩率越高。
- 例m=500,n=400,k=50:比值约 \(50\times(1/500+1/400)=0.225\),即存储量约为原图的22.5%。
推荐系统
衣橱整理师还有一位邻居是服装店老板。老板想给每位顾客推荐衣服,但他并不真正了解顾客。他手里只有一张巨大的评分表:行是顾客,列是商品,格子是顾客对商品的打分(很多格子是空的)。这张表在数学上叫“用户-物品矩阵”。它的秘密在于:它通常是低秩的。
为什么低秩?因为顾客的喜好通常只由少数几个隐因子决定,比如风格偏好、价格敏感度、场合需求。每个顾客是这些隐因子的组合,每个商品也是。所以评分矩阵可以近似分解成两个小矩阵的乘积:\(R \approx P Q^{\mathsf{T}}\)。\(P\) 捕捉“顾客画像”,\(Q\) 捕捉“商品画像”。这就像整理师摸清了顾客偏爱哪几种基本款,然后按款式去推荐。
有了分解后,预测缺失评分就很简单:顾客 \(u\) 对商品 \(i\) 的预测评分 = \(P\) 的第 \(u\) 行与 \(Q\) 的第 \(i\) 行做内积。这正是推荐系统里隐因子模型(Latent Factor Model)的核心思想。实际系统中通常用交替最小二乘(ALS)或加权SVD来求解,因为标准SVD要求矩阵没有缺失值。
低秩假设就是整理师对老板说的那句话:“不用问顾客几百个问题,摸清他对几种核心风格的态度就够了。”推荐系统用低秩近似,把“认识顾客”的复杂任务变成“识别几种风格”的轻量任务。
- r_ui 的预测\(\hat{r}_{ui}\) 是用户 \(u\) 对物品 \(i\) 的预测评分,是评分矩阵中缺失格子的填充值。
- p_u用户 \(u\) 在 \(k\) 个隐因子上的偏好向量,长度为 \(k\),可理解为顾客对 \(k\) 种风格的喜欢程度。
- q_i物品 \(i\) 在 \(k\) 个隐因子上的特征向量,长度为 \(k\),表示这件商品包含多少种风格。
- 内积两个向量对应分量相乘再求和。隐因子 \(f\) 的偏好强、物品在 \(f\) 上得分高,这一项贡献就大,预测评分就高。
数据去噪
整理师最拿手的另一项工作是“除尘”。有些衣服放久了沾灰,拍打一下又光洁如新。数据世界里也有类似的灰尘——噪声。真实信号往往是低秩的,而噪声是随机、无结构的,它会均匀地污染所有方向,让矩阵的“秩”被抬高。
怎么区分信号和噪声?再次请出SVD:信号通常集中在少数几个大的奇异值上,噪声则平摊在大量小奇异值上。去噪的方法因此非常直接——保留前 \(k\) 个奇异值,把后面的小奇异值砍掉,再用截断SVD重建矩阵。重建结果就是“拍过灰”的干净数据。
这类方法在图像去噪、语音增强、传感器数据处理中都很常见。比如摄像头拍到的暗光照片,随机噪声让画面颗粒感重,对像素矩阵做低秩近似后,颗粒感明显减弱而主体边缘保持良好。当然,\(k\) 不能选太大,否则噪声又回来了;也不能太小,否则连信号都删掉了。
去噪和整理衣橱如出一辙:灰尘(噪声)让每件衣服的清单变得千奇百怪,擦掉灰尘,衣服又变回那几件基本款。低秩近似就是那块干净的抹布。
- A观测到的带噪矩阵,等于干净的低秩矩阵加上随机噪声。
- A_clean 的估计用截断SVD重建的 \(A_k\) 作为干净数据的估计。
- 小奇异值 = 噪声第 \(k+1\) 到末尾的奇异值主要来自随机噪声,置零后噪声消失。
- 效果保留的 \(k\) 个模式把能量集中在信号结构上,从而“洗掉”噪声。
秩选择与误差
最后的问题是:整理师到底该选几件“基本款”?带少了,风格全丢;带多了,箱子装不下。选择秩 \(k\) 是低秩近似里最需要经验的一步。好在我们可以用工具量化权衡。
最常用的指标是能量占比和相对误差。能量占比 \(E_k = \sum_{i=1}^{k}\sigma_i^2 / \sum_{i=1}^{r}\sigma_i^2\),表示前 \(k\) 个奇异值携带了原矩阵多少比例的信息。一般选 \(E_k\) 达到0.9~0.95的 \(k\) 作为拐点。另一种做法是画“碎石图”:奇异值陡峭下降后进入平缓长尾,拐点对应的 \(k\) 就是合适的秩。更严谨的做法是交叉验证:把部分数据遮住,用不同 \(k\) 预测并比较误差。
误差评估公式也很直接:相对误差 \(\varepsilon_k = \|A-A_k\|_F/\|A\|_F = \sqrt{1-E_k}\)。如果 \(\varepsilon_k=10\%\),说明近似矩阵平均每个元素偏差约10%。工程上,先看奇异值谱,再结合压缩目标(允许的失真、存储限制)选 \(k\),最后用测试集验证。
选秩就像打包旅行:你先扫一眼衣橱(看奇异值谱),估计几天行程(压缩目标),再决定带几件衣服(选 \(k\))。用能量占比这把尺子,你不需要每件都试穿,就能做出明智取舍。
- ε_k相对误差,介于0到1之间。0表示完全复原,1表示退化到零矩阵。
- 分子\(\|A-A_k\|_F\) 是截断后丢掉的尾部奇异值能量,等于 \(\sum_{i=k+1}^{\min(m,n)}\sigma_i^2\) 开方。
- 分母\(\|A\|_F\) 是原始矩阵的总能量,等于所有奇异值平方和开方。
- 1-E_k能量占比 \(E_k\) 的互补部分。能量保留95%,则相对误差约 \(\sqrt{0.05}\approx 22\%\)。
AI 应用场景
图像批量压缩加速网页加载
阶段:数据预处理与特征压缩
解决的问题:电商网站或内容平台有海量商品图,原始图片存储和带宽成本高,用户加载速度慢。传统做法是直接压缩成低分辨率图,但画质损失明显。用低秩近似可以在保持主体轮廓的前提下,用更少的数值存储同一张图,显著降低传输成本。
具体案例:某图片素材平台把用户上传的PNG灰度图转为矩阵,批量做截断SVD,\(k\) 按图片尺寸动态选择(如保留95%能量),压缩后存储降到原来20%~30%,缩略图加载速度提升两倍以上。
电商推荐召回
阶段:模型训练与召回排序
解决的问题:用户-物品评分矩阵动辄百万行、十万列,直接做协同过滤计算量爆炸,且稀疏矩阵难以直接利用。用低秩隐因子分解把海量用户和物品映射到几十个隐因子上,既能预测缺失评分,又能为召回阶段快速生成候选集,解决冷启动中的已有行为稀疏问题。
具体案例:某视频平台用交替最小二乘(ALS)把“用户×视频”播放时长矩阵分解成 \(k=50\) 的隐因子矩阵,用用户向量与物品向量的内积预测播放概率,召回阶段候选池计算耗时下降约70%,线上点击率提升12%。
金融协方差矩阵去噪
阶段:特征工程与风险建模
解决的问题:股票收益率协方差矩阵是投资组合优化的核心输入,但历史数据中的随机噪声会放大协方差矩阵中的虚假结构,导致优化结果不稳定。低秩近似把协方差矩阵的“信号部分”(少数市场因子)和“噪声部分”(个股扰动)分离,提高风险预测的稳健性。
具体案例:某量化团队对沪深300成分股的历史收益率协方差矩阵做SVD,保留前10个奇异值重建“去噪协方差矩阵”,回测中组合年化波动率预测误差下降约15%,最大回撤显著改善。
Python 演示
import numpy as np def low_rank_approx(A, k): # 用截断SVD得到秩k近似矩阵, 返回A_k, 相对误差和能量占比 U, s, Vt = np.linalg.svd(A, full_matrices=False) A_k = U[:, :k] @ (s[:k, None] * Vt[:k, :]) rel_err = np.linalg.norm(A - A_k) / np.linalg.norm(A) energy = (s[:k] ** 2).sum() / (s ** 2).sum() return A_k, rel_err, energy def main(): rng = np.random.default_rng(42) m, n, true_r = 50, 40, 10 B = rng.normal(size=(m, true_r)) C = rng.normal(size=(true_r, n)) clean = B @ C noisy = clean + 0.5 * rng.normal(size=(m, n)) print("观测矩阵形状:", noisy.shape) for k in (1, 5, 10, 15, 20): A_k, rel_err, energy = low_rank_approx(noisy, k) print("k=%2d 相对误差=%.3f 能量占比=%.3f" % (k, rel_err, energy)) denoised, _, _ = low_rank_approx(noisy, 10) print("去噪前噪声标准差: %.3f" % np.std(noisy - clean)) print("去噪后噪声标准差: %.3f" % np.std(denoised - clean)) if __name__ == "__main__": main()
U, s, Vt = np.linalg.svd(A, full_matrices=False)对矩阵做完整SVD,得到左奇异向量、奇异值数组和右奇异向量;full_matrices=False省去冗余大矩阵。A_k = U[:, :k] @ (s[:k, None] * Vt[:k, :])只保留前k个奇异值和对应向量,等价于 \(U_k \Sigma_k V_k^{\mathsf{T}}\)。rel_err = np.linalg.norm(A - A_k) / np.linalg.norm(A)计算相对误差 \(\varepsilon_k\),对应正文中的Frobenius范数误差公式。energy = (s[:k] ** 2).sum() / (s ** 2).sum()计算能量占比 \(E_k\),用于评估前k个奇异值携带了多少信息。numpy.random.default_rng(42)用固定种子生成可控随机数,保证实验结果可复现。noisy = clean + 0.5 * rng.normal(size=(m, n))在低秩信号中加入高斯噪声,模拟真实世界里的脏数据。
常见误区
误区我觉得一个 \(3\times 4\) 的小矩阵肯定比 \(1000\times 1000\) 的大矩阵“秩低”,因为小矩阵数据少、结构简单。
正解秩衡量的是独立信息的数量,和矩阵体积没有直接关系。一个 \(3\times 4\) 矩阵完全可能秩为3(满秩),而一个 \(1000\times 1000\) 矩阵可能秩只有2。就像衣橱的大小不等于“基本款”的多少:大柜子可能只挂几种常穿款,小柜子也可能塞满互不重复的奇装异服。
为何常见:“低秩”里的“低”字给人“小”的直觉,初学者容易把秩和矩阵尺寸混为一谈。
误区我要保留90%的信息,就应该保留90%的奇异值不砍掉,比如有100个奇异值就保留90个。
正解信息(能量)集中在前几个大奇异值上。保留90%能量往往只需要保留前10%~30%的奇异值,因为奇异值衰减通常很快。就像你日常穿衣90%的时间只穿少数几件衣服,而不是穿90%的衣服。正确的做法是先看能量占比曲线,再决定 \(k\)。
为何常见:人们习惯用“个数占比”思考,忽略了每个奇异值还有大小权重这一维度。
误区推荐系统里直接把用户-物品评分矩阵丢给 `np.linalg.svd`,输出结果就能补齐缺失评分。
正解标准SVD要求矩阵的所有元素已知,而真实评分矩阵大部分格子是空的。直接对缺失值补零再做SVD,会把“未评分”误当成“评分为0”,引入严重偏差。实际工程中会用ALS、加权SVD或先做均值填充再分解等方法,专门处理缺失值。
为何常见:很多科普把“推荐系统 = SVD”一句话带过,忽略了缺失值这个关键前提,导致代码照搬后效果不对。
误区低秩近似不就是压缩吗?那 \(k\) 选得越小,压得越狠,效果越棒。
正解\(k\) 太小会把真实的信号结构一起扔掉。Eckart-Young定理保证的是“给定 \(k\) 下最优”,但并没有告诉你 \(k\) 应该取多少。就像旅行箱太小,你把羽绒服(重要信号)也舍了,到了目的地冻得发抖。选 \(k\) 要看能量占比、应用场景和误差容忍度,压缩率和还原度是一对需要权衡的砝码。
为何常见:过度关注压缩率单一指标,忽视了低秩近似的真正目标是“用最小代价还原最关键的信息”。
面试题
Q1. 低秩矩阵的“秩”描述的是什么?
- A.矩阵的行数
- B.矩阵的列数
- C.矩阵中线性独立行/列的最大数量← 正确答案
- D.矩阵中非零元素的个数
答案:C。秩衡量的是矩阵中独立信息的数量,就像衣橱里真正独立的“基本款”数量。行数和列数只是柜子尺寸,非零元素个数也只是衣服总件数,都不等于独立样式数。
Q2. SVD把矩阵 \(A\) 分解为 \(U\Sigma V^{\mathsf{T}}\),奇异值存放在哪个矩阵?
- A.U
- B.V
- C.\(\Sigma\)← 正确答案
- D.A
答案:C。分解式中 \(\Sigma\) 是对角矩阵,对角元素就是奇异值 \(\sigma_i\),代表每种“风格组合”的强度。\(U\) 和 \(V\) 是由正交向量组成的旋转矩阵,不含奇异值。
Q3. 截断SVD保留前 \(k\) 个奇异值得到 \(A_k\),当 \(k\) 增大时下列哪项一定减小?
- A.存储量
- B.相对误差← 正确答案
- C.能量占比
- D.矩阵的秩
答案:B。\(k\) 越大,纳入的独立模式越多,\(A_k\) 离 \(A\) 越近,相对误差单调下降。存储量和矩阵秩都随 \(k\) 增大而增大,能量占比随 \(k\) 增大而升高,不是减小。
Q4. Eckart-Young定理保证了什么?
- A.SVD分解一定是最快的算法
- B.低秩矩阵一定最省内存
- C.截断SVD是所有秩不超过 \(k\) 的矩阵中最优近似← 正确答案
- D.矩阵的奇异值一定为正数
答案:C。定理说明在Frobenius范数和谱范数下,\(A_k\) 是秩不超过 \(k\) 的矩阵里误差最小的近似。它与算法速度、内存无关,奇异值只需非负而不是必须为正。
Q5. 一张 \(200\times200\) 的灰度图取 \(k=20\) 的截断SVD压缩,存储量约为原来的多少?
- A.50%
- B.20%← 正确答案
- C.10%
- D.5%
答案:B。压缩率约等于 \(k(m+n)/mn = 20\times400/40000 = 20\%\)。原本4万个像素值被压缩为8000个左右,相当于只保留最核心的两成存储,主体信息仍可还原。
Q6. 若保留的能量占比 \(E_k=0.91\),按公式 \(\varepsilon_k=\sqrt{1-E_k}\),相对误差约为多少?
- A.9%
- B.30%← 正确答案
- C.20%
- D.91%
答案:B。\(\varepsilon_k=\sqrt{1-0.91}=\sqrt{0.09}=0.3=30\%\)。容易被“1-0.91=9%“误导,但误差要开方。就像少带了9%的”风格能量”,反映到每件衣服的具体还原上,偏差放大到三成。
Q7. 用户-物品评分矩阵之所以可以用低秩近似,根本原因是?
- A.矩阵一定是对称的
- B.用户数量和物品数量相等
- C.用户偏好由少数隐因子主导← 正确答案
- D.每个用户都评价了所有物品
答案:C。因为少数隐因子(风格、价格敏感度、场合需求)决定了用户偏好,所以评分矩阵近似低秩,可分解成用户画像 \(P\) 与物品画像 \(Q\) 的乘积。评分矩阵通常不对称、行列数不等、存在大量缺失。
Q8. 下列哪些属于低秩近似的典型应用?
- A.图像压缩← 正确答案
- B.推荐系统隐因子模型← 正确答案
- C.数据去噪← 正确答案
- D.矩阵求逆的唯一方法
答案:ABC。低秩近似应用于图像压缩(第5节)、推荐系统隐因子模型(第6节)、数据去噪(第7节)。它不是矩阵求逆的唯一方法,求逆只是利用分解的一种线性代数操作。
Q9. 关于奇异值与截断SVD,下列说法正确的有?
- A.奇异值通常按升序排列
- B.前几个奇异值携带大部分能量← 正确答案
- C.截断尾部奇异值有助于去噪← 正确答案
- D.保留的奇异值越多,重建越接近原矩阵← 正确答案
答案:BCD。奇异值习惯降序排列;能量集中于头部奇异值;噪声分散在小奇异值上,截断可去噪;保留越多越接近原矩阵。A说升序是错误的。
Q10. 在推荐系统中使用SVD类方法时,哪些处理是必要或合理的?
- A.处理大量缺失值,不能对原始评分矩阵直接做标准SVD← 正确答案
- B.可以用均值填充等方法把矩阵补全后再分解← 正确答案
- C.用ALS等方法避免为缺失值硬填一个错误值← 正确答案
- D.分解后用户向量与物品向量的内积可用于预测评分← 正确答案
答案:ABCD。标准SVD要求矩阵所有元素已知,而真实评分矩阵几乎都有缺失;均值填充是简单可行的补全手段;ALS是处理缺失值的经典替代方案;预测评分正是用户向量 \(p_u\) 与物品向量 \(q_i\) 的内积。四项都合理。