跳到主要内容

降维 I — PCA、LSA、NMF:三种压缩数据的刀法

这一章讲三件事: 降维到底在干什么(不是删列,是换坐标); 三种各带一刀法的压缩术:PCA 几何刀、LSA 代数刀、NMF 非负刀; 以及「可解释性」这个反复出现的词,在这三种刀法下分别值多少钱。 无监督学习的两大任务(降维、聚类)里,本章管降维的前半场。

1. 顶层全景:降维的三种刀法

一堆 100 列的数据,想用 5 列概括
↓ 刀法一 PCA:找数据最「摊得开」的方向,把数据转过去(几何)
↓ 刀法二 LSA:把「单词×文本」大矩阵拆成三块,只留最重要的部分(代数)
↓ 刀法三 NMF:同拆,但规定所有数 ≥ 0,拆出来的因子都是「零件」(带约束的代数)
共同点:新列都是老列的组合,不扔数据,只换说法

图说:三种刀法的差别不在「压多狠」,在「压出来的新列还能不能解释」。

先立定义。降维(PCA 所属的任务类别)指的是:在保留数据特征的前提下,用少量变量表示有许多变量的数据——原书给的参照是:100 个变量的数据,换成 5 个变量来表示,后续分析就容易多了1

但降维有两条路线:一种是只挑重要的旧列留下,其余扔掉;另一种是用旧列调配出新列。PCA 走的是第二条2。这是关键分岔:删列会丢信息,调配新列是把散在多列里的共性归拢到一个新轴上。

2. PCA:把数据转到最「摊得开」的方向上

PCA(主成分分析)历史悠久、应用广泛,专治变量之间有关联的数据3。身高体重就是典型的关联对:身高高的人多半体重重,两列信息大量重叠——重叠的部分,正是可以压缩的部分。

PCA 的新轴叫主成分:原书定义,它是原始变量的线性和——每个旧列乘一个权重、加起来4。主成分有两个属性:

  • 方向:权重怎么分配,决定新轴朝哪边;
  • 重要度:新轴上数据摊得多开(方差大小),决定这个轴携带多少信息——取值都一模一样的列携带零信息,取值千差万别的列才体现数据的特点5

排第一的叫第一主成分,它在方差最大的方向上,携带的原始信息最多6

主走查:一次「乘矩阵,看方向变没变」

PCA 的核心步骤只有三步:算协方差矩阵(衡量各列之间关联的矩阵)→ 解特征值问题 → 按特征值大小排主成分7。其中「特征值问题」听着吓人,原书用一次具体的乘法把它拆穿了——这一步是全章的主走查8

矩阵 A = | 3 1 | 向量 x1 = (1, 1) 向量 x2 = (2, −1)
| 2 2 |

乘一遍:
A·x1 = (3×1+1×1, 2×1+2×1) = (4, 4)
A·x2 = (3×2+1×(−1), 2×2+2×(−1)) = (5, 2)

看方向:
x2 (2,−1) → (5,2):方向变了(斜率从 −0.5 变成 0.4),
它只是个普通向量;
x1 (1,1) → (4,4):还在原来的直线方向上(斜率都是 1),
只是长度变成 4 倍!

乘矩阵本会同时改变向量的方向和长度;但有的向量乘完方向纹丝不动,只有长度缩放——原书定义,这样的向量就是矩阵 A 的特征向量,长度缩放的倍数就是特征值9。上面 (4,4) 与 (1,1) 同在一条直线上,所以 x1 是 A 的特征向量,特征值是 410

这和「找数据摊得开的方向」有什么关系?原书点破:对协方差矩阵解特征值问题,在数学上等同于寻找使方差最大化的正交轴(正交=互相垂直,轴与轴之间不重复携带信息)11;特征值大的方向就是数据摊得开的方向。PCA 里那个矩阵 A 正是协方差矩阵12

协方差值得就地讲清(原书附录给了正式定义):它衡量两组数据是否同涨同跌——协方差为正,数据有向右上方延伸的趋势;为负,向右下方。但协方差的数值大小受数据自身波动幅度影响,协方差值大并不意味着关联强;把它除以两边各自的波动幅度——这个幅度的行话叫标准差——就得到相关系数,数值干净地落在 −1 到 1 之间13

压缩到几维?看累计贡献率

每个主成分的贡献率 = 它的特征值 ÷ 所有特征值总和,表示这个轴解释了数据的多大比例;从第一主成分开始累加,就是累计贡献率14。原书给了实操基准:一组数据的主成分累计贡献率依次为 0.36、0.55、0.67、0.74、0.80……按「累计贡献率 0.7 以上取 4 个主成分、0.8 以上取 5 个」这类基准定维数15

PCA 也有明确的失败条件:变量之间没有相关性的数据,各主成分贡献率几乎相同,不适合用 PCA 降维16——没有重叠,自然压不动。

3. LSA:让「车」和「汽车」在数学里靠近

1988 年,信息搜索领域提出了 LSA。它要对付的东西叫语义——词与句子的含义;「潜在语义分析」这个全名说的就是:把潜藏在用词之下的含义变成坐标17

它治的病原书举例极好:老式的搜索服务给文章建关键字清单(行话叫索引),搜「汽车」找不到只写「车」的文章——因为机器不知道这两个词是一回事,而「一个词一个词地教给计算机」同义词,人力上不现实18

LSA 的思路:先把文本变成一张矩阵(把数排成行与列的表:行是词、列是文本),再做矩阵分解(把一张矩阵写成几张矩阵相乘),把车和汽车搬进一个新空间。这个空间的坐标是「潜在语义」——语义,指的是词与句子的含义;在新空间里,车和汽车不再是两个互不相干的格子,而被表示为相近的词19

主走查:8 个词、4 篇短文,压到 2 个含义

原书造了 4 篇一句话的文本:「坐汽车去公司」「坐车去的」「在餐厅吃汉堡牛肉饼」「在餐厅吃意大利面」,拼出一张 8 词 × 4 文本的计数矩阵(哪行哪列是几,数的就是「这个词在这篇里出现了几次」)20。然后做矩阵分解,得到 X = U·D·V 转置,其中 D 是对角矩阵(只有对角线上有非零数),对角元素 2.24、1.90、1.18、1.00 按重要度从大到小排21:

保留 D 里最重要的 2 个(2.24 和 1.90),
同时砍掉 U、V 转置里对应的第 3、4 列

单词们在新空间里的坐标(取自原书表 3-2):
汽车 (0, 0.85) 公司 (0, 0.85) 去 (0, 1.38) 车 (0, 0.53)
← 一串:全部横坐标为 0,挤在新轴 B 上
餐厅 (1.41, 0) 汉堡牛肉饼 (0.71, 0) 吃 (1.41, 0) 意大利面 (0.71, 0)
← 一串:全部纵坐标为 0,挤在新轴 A 上

读出来:「车/汽车/公司/去」归成一伙(通勤主题),
「餐厅/汉堡牛肉饼/吃/意大利面」归成另一伙(吃饭主题)。
「车」和「汽车」的坐标(0,0.53) 与 (0,0.85)——同一根轴,从此数学上是一家人。

这个分解的具体技术叫奇异值分解(把矩阵拆成两个正交矩阵和一个对角矩阵的乘积)22。压掉一半的值后,累计贡献率约 0.67——2 个新变量保住了约 67% 的原始信息23。而新轴 A、B 本身没有字面意义,原书说它们是「基于单词的关联性而创建的具有潜在意义的特征」——潜在变量:不能直接观察、但从数据里推得出来的变量24

LSA 的三笔账

原书给 LSA 记了三笔账25:

  1. 难解释:分解出的各根轴互相垂直(正交)、元素可正可负,负值不好读人话——NMF 和 LDA 的结果更容易解释;
  2. 算得贵:文本场景下矩阵的行数等于不同词的个数(这个数行话叫词表),动辄几十万行,奇异值分解代价高;
  3. 更新难:每来一个新词,整张矩阵要重建重算。

第三笔在今天尤其致命:真实语料每天进新词,一个「加个词就要全量重算」的系统几乎没法上线(补充:不在书里,来自通用知识)。

4. NMF:强迫所有数为正,因子就变成了「零件」

NMF(非负矩阵分解)是另一种矩阵分解,特点是输入和输出全为非负数——这个特点带来模型的可解释性26。它用在看图的、挖文本的、做推荐的各个领域27。三条特点28:

  1. 原矩阵元素非负;
  2. 分解出来的矩阵元素也非负;
  3. 没有「各根轴必须互相垂直(正交)」的约束——各轴之间允许信息重复。

第三条是它和 PCA/LSA 的分水岭。原书拿文本举例:非负意味着每个文本能写成主题的加法——「主题 A 占 0.5、主题 B 占 0.3」,一眼能读;若允许负值,「主题 A 为 −0.3」就没法解释了29。允许轴间信息重叠,反而贴合真实文本(两个主题常常你中有我);原书还给了几何证据:数据分成几块时,NMF 能给每个块各配一根轴,而 PCA 的正交轴做不到「一人一块」30

机制与人脸实验

分解的形式:把 n 行 d 列的矩阵 V 近似拆成 W(n 行 r 列)× H(r 行 d 列),r 取比 d 小的数就完成降维;W 的每一行就是对应那条数据的新表示31。求法是交替更新:固定 H 更新 W,再固定 W 更新 H,来回逼近,直到收敛(调整的幅度越来越小,最终不再变化)32

原书的人脸实验是全章最直观的证据:19×19 像素(361 个特征)的人脸照片 2429 张,压到 49 个潜在变量,PCA 与 NMF 各做一遍,再把 49 维表示乘回 H(49 行 361 列)恢复图像33:

PCA 的 49 个「基脸」:每张都是完整人脸的鬼影,
恢复 = 把「正的脸」和「负的脸」(像素为负的脸!)
加在一起凑出原图 —— 原书自己都吐槽:听上去是不是有些奇怪?

NMF 的 49 个「基脸」:大量区域是纯 0(黑色),
每张只保留人脸的一个部分——眼睛、嘴角、鼻梁……
恢复 = 拿这些零件拼装。

图说:「负的脸」的原文吐槽、纯 0 区域、部分特征,
均出自原书对图 3-12/3-13 的解说[^34]。

同样压到 49 维,PCA 给你 49 个无法解释的鬼影,NMF 给你 49 张可指认的零件图。降维的第三种刀法,贵在约束,值在可解释。

5. 作者的判断与证据

说法性质依据
(4,4) 方向不变、特征值 4书内给完整乘法演算逐数可核8
累计贡献率 0.7→4 维、0.8→5 维作者给的实操基准,非定理书内建议口径15
车与汽车归入同一潜在轴书内给具体矩阵与坐标表 3-2 数字20
LSA 三笔账(难解释/算得贵/更新难)作者的经验总结书内注意点25
PCA 恢复人脸=正负鬼影相加书内实验+作者的吐槽实验解说34
NMF 主题可加法解释书内给出 0.5/0.3 的示例句式书内示例29

6. 边界与局限

  • PCA 的「第一主成分方差最大」只是数学上的最优摊开方向,不保证这个方向有业务含义——中学生成绩例子里它恰好对应「文理倾向」,是运气好,不是必然(原书也承认需要分析者主观解释)。
  • 贡献率基准(0.7/0.8)是经验值,不是标准答案;换成 0.9 也常见。
  • LSA 的更新难在三家的现代变体里已有缓解(在线分解、增量奇异值分解),原书 2019 年成书时未提(补充:不在书里,来自通用知识)。
  • NMF 的结果依赖初始化,不同随机种子可能拆出不同的零件组合;原书未提(补充:不在书里,来自通用知识)。
  • 版本提示:原书代码用 PCA(n_components=2)TruncatedSVD(n_components=2)NMF(n_components=2);鸢尾花 4 维压 2 维的输出前两行是 (−2.684, 0.327) 与 (−2.715, −0.170)35

7. 可带走的

  1. 降维两条路:删旧列,或调配新列;PCA 走后者——新列是旧列的加权和;
  2. 主成分=数据最摊得开的方向;第一主成分方差最大,携带信息最多;
  3. 特征值问题不神秘:乘矩阵后方向不变的向量是特征向量,缩放倍数是特征值;
  4. 协方差管同涨同跌,但它受数值幅度干扰;相关系数(−1 到 1)才是干净的关联度;
  5. 定压缩到几维看累计贡献率:0.7 或 0.8 是常见基准;
  6. 变量互不相关的数据,PCA 无用武之地;
  7. LSA 让「车」和「汽车」共享一根轴——同义问题靠共现统计解决,不是靠词典;
  8. 矩阵分解三件套:重要度在对角矩阵 D 上,砍小值=降维,潜在变量=推出来的新轴;
  9. 非负约束是可解释性的代价与来源:NMF 的因子是零件(脸的部件、文本的主题),PCA 的因子是正负鬼影;
  10. 遇到「要给人看」的降维结果,优先 NMF/LDA;纯喂给后续算法的,PCA/LSA 的鬼影无所谓。

8. 原文地图

主题原书章原文位置
降维定义、100→53.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:9(搜「以少量的变量表示有许多变量的数据」) · text/15-ch03-01-3-1-10-pca.txt:11(搜「不如使用 5 个变量」)
两条路线、PCA 选调配3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:13(搜「构造新的变量。PCA 使用的是后一种」)
主成分=线性和3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:15(搜「的变量的线性和的形式组成」)
方向与重要度3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:18(搜「长度表示重要度」)
第一主成分方差最大3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:24(搜「方差最大的轴上」)
三步流程、协方差矩阵3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:36(搜「对协方差矩阵求解特征值问题」)
Ax=λx、等于找方差最大正交轴3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:45(搜「寻找使方差最大化的正交轴」)
主走查乘法 (4,4)/(5,2)3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:63(搜「分别变换为 (4, 4) 和 (5, 2)」)
特征向量/特征值定义3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:65(搜「缩放的比例叫作特征值」) · text/15-ch03-01-3-1-10-pca.txt:69(搜「与原向量在一条直线上」)
A 就是协方差矩阵3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:73(搜「矩阵 A 就是协方差矩阵」)
贡献率、累计贡献率3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:78(搜「叫作贡献率」)
0.7/0.8 基准、无相关不适合3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:112(搜「根据基准值决定主成分的数量」) · text/15-ch03-01-3-1-10-pca.txt:114(搜「不适合用 PCA 进行降维」)
协方差与相关系数附录text/27-apx.txt:68(搜「表示两组数据 x、y 之间的关系性」) · text/27-apx.txt:79(搜「并不意味着向右上方延伸的趋势大」) · text/27-apx.txt:90(搜「值在 -1 到 1 之间」)
LSA 1988、同义性问题3.2 算法11:LSAtext/16-ch03-02-3-2-11-lsa.txt:10(搜「1988 年被提出的算法」) · text/16-ch03-02-3-2-11-lsa.txt:15(搜「同义性的问题」) · text/16-ch03-02-3-2-11-lsa.txt:16(搜「一个词一个词地教给计算机」)
矩阵分解定义、语义空间3.2 算法11:LSAtext/16-ch03-02-3-2-11-lsa.txt:20(搜「表示为多个矩阵的乘积的形式」) · text/16-ch03-02-3-2-11-lsa.txt:29(搜「被表示为相似的单词」)
8 词×4 文本、UDV3.2 算法11:LSAtext/16-ch03-02-3-2-11-lsa.txt:34(搜「文本中出现的单词的个数」) · text/16-ch03-02-3-2-11-lsa.txt:65(搜「2.24」)
保留 2 个、删 3/4 列3.2 算法11:LSAtext/16-ch03-02-3-2-11-lsa.txt:81(搜「选出最重要的 2 个」)
单词新坐标、关联性3.2 算法11:LSAtext/16-ch03-02-3-2-11-lsa.txt:133(搜「1.41」) · text/16-ch03-02-3-2-11-lsa.txt:143(搜「显示了各个单词之间的关联性」)
累计贡献率 0.673.2 算法11:LSAtext/16-ch03-02-3-2-11-lsa.txt:196(搜「约 67% 的原始数据的信息」)
奇异值分解、三笔账3.2 算法11:LSAtext/16-ch03-02-3-2-11-lsa.txt:201(搜「叫作奇异值分解的技术」) · text/16-ch03-02-3-2-11-lsa.txt:205(搜「NMF 和 LDA 等算法的结果更容易」) · text/16-ch03-02-3-2-11-lsa.txt:208(搜「非常大的矩阵上进行奇异值分解」) · text/16-ch03-02-3-2-11-lsa.txt:210(搜「模型的更新难度很大」)
NMF 定义与可解释性3.3 算法12:NMFtext/17-ch03-03-3-3-12-nmf.txt:4(搜「非负矩阵分解」) · text/17-ch03-03-3-3-12-nmf.txt:6(搜「模型的可解释性强」)
三特点、无正交约束3.3 算法12:NMFtext/17-ch03-03-3-3-12-nmf.txt:16(搜「这一约束条件」)
主题加法、负值难解释3.3 算法12:NMFtext/17-ch03-03-3-3-12-nmf.txt:20(搜「主题 A 为 0.5、主题 B 为」) · text/17-ch03-03-3-3-12-nmf.txt:23(搜「就比较难解释」)
信息重复、多个数据块3.3 算法12:NMFtext/17-ch03-03-3-3-12-nmf.txt:24(搜「潜在变量必须正交」) · text/17-ch03-03-3-3-12-nmf.txt:30(搜「无法找到所有数据块的特征」)
V=W·H、交替更新3.3 算法12:NMFtext/17-ch03-03-3-3-12-nmf.txt:37(搜「选择比 d 小的 r 就可以进行降维」) · text/17-ch03-03-3-3-12-nmf.txt:52(搜「交替更新 W 和 H」)
人脸 2429 张、361→49、恢复3.3 算法12:NMFtext/17-ch03-03-3-3-12-nmf.txt:106(搜「2429 张」) · text/17-ch03-03-3-3-12-nmf.txt:110(搜「49 个潜在变量」) · text/17-ch03-03-3-3-12-nmf.txt:119(搜「49 行 361 列矩阵的乘积」)
负脸吐槽、部分特征3.3 算法12:NMFtext/17-ch03-03-3-3-12-nmf.txt:124(搜「听上去是不是有些奇怪」) · text/17-ch03-03-3-3-12-nmf.txt:125(搜「人脸的部分特征」)
iris 代码输出3.1 算法10:PCAtext/15-ch03-01-3-1-10-pca.txt:95(搜「-2.68420713」)

Footnotes

  1. 出处:「3.1 算法10:PCA」第 9 段(text/15-ch03-01-3-1-10-pca.txt:9,搜「以少量的变量表示有许多变量的数据」)与第 11 段(text/15-ch03-01-3-1-10-pca.txt:11,搜「不如使用 5 个变量」)。

  2. 出处:「3.1 算法10:PCA」第 13 段(text/15-ch03-01-3-1-10-pca.txt:13,搜「构造新的变量。PCA 使用的是后一种」)。

  3. 出处:「3.1 算法10:PCA」第 8 段(text/15-ch03-01-3-1-10-pca.txt:8,搜「变量之间存在相关性的数据很有效」)。

  4. 出处:「3.1 算法10:PCA」第 15 段(text/15-ch03-01-3-1-10-pca.txt:15,搜「的变量的线性和的形式组成」)。

  5. 出处:「3.1 算法10:PCA」第 18 段(text/15-ch03-01-3-1-10-pca.txt:18,搜「长度表示重要度」)与第 19~20 段(搜「在每个数据点取相同值的变量并不重要」)。

  6. 出处:「3.1 算法10:PCA」第 24 段(text/15-ch03-01-3-1-10-pca.txt:24,搜「方差最大的轴上」)。

  7. 出处:「3.1 算法10:PCA」第 35~36 段(text/15-ch03-01-3-1-10-pca.txt:36,搜「对协方差矩阵求解特征值问题」)。

  8. 出处:「3.1 算法10:PCA」第 63 段(text/15-ch03-01-3-1-10-pca.txt:63,搜「分别变换为 (4, 4) 和 (5, 2)」);矩阵 A 与两个向量在第 54~55 段。 2

  9. 出处:「3.1 算法10:PCA」第 65 段(text/15-ch03-01-3-1-10-pca.txt:65,搜「缩放的比例叫作特征值」)。

  10. 出处:「3.1 算法10:PCA」第 69~70 段(text/15-ch03-01-3-1-10-pca.txt:69,搜「与原向量在一条直线上」;text/15-ch03-01-3-1-10-pca.txt:72,搜「乘以常数 4 的变换是一样的」)。

  11. 出处:「3.1 算法10:PCA」第 45 段(text/15-ch03-01-3-1-10-pca.txt:45,搜「寻找使方差最大化的正交轴」)。

  12. 出处:「3.1 算法10:PCA」第 73 段(text/15-ch03-01-3-1-10-pca.txt:73,搜「矩阵 A 就是协方差矩阵」)。

  13. 出处:「附录」第 68 段(text/27-apx.txt:68,搜「表示两组数据 x、y 之间的关系性」)、第 79 段(text/27-apx.txt:79,搜「并不意味着向右上方延伸的趋势大」)、第 90 段(text/27-apx.txt:90,搜「值在 -1 到 1 之间」)。

  14. 出处:「3.1 算法10:PCA」第 78 段(text/15-ch03-01-3-1-10-pca.txt:78,搜「叫作贡献率」)。

  15. 出处:「3.1 算法10:PCA」第 110~112 段(text/15-ch03-01-3-1-10-pca.txt:112,搜「根据基准值决定主成分的数量」);0.36/0.55/0.67/0.74/0.80 在第 110 段。 2

  16. 出处:「3.1 算法10:PCA」第 114 段(text/15-ch03-01-3-1-10-pca.txt:114,搜「不适合用 PCA 进行降维」)。

  17. 出处:「3.2 算法11:LSA」第 10 段(text/16-ch03-02-3-2-11-lsa.txt:10,搜「1988 年被提出的算法」)。

  18. 出处:「3.2 算法11:LSA」第 15 段(text/16-ch03-02-3-2-11-lsa.txt:15,搜「同义性的问题」)与第 16 段(text/16-ch03-02-3-2-11-lsa.txt:16,搜「一个词一个词地教给计算机」)。

  19. 出处:「3.2 算法11:LSA」第 20 段(text/16-ch03-02-3-2-11-lsa.txt:20,搜「表示为多个矩阵的乘积的形式」)与第 29 段(text/16-ch03-02-3-2-11-lsa.txt:29,搜「被表示为相似的单词」)。

  20. 出处:「3.2 算法11:LSA」第 34 段(text/16-ch03-02-3-2-11-lsa.txt:34,搜「文本中出现的单词的个数」);4 篇文本在第 3639 段;单词新坐标(表 3-2)在第 125139 段(text/16-ch03-02-3-2-11-lsa.txt:133,搜「1.41」)。 2

  21. 出处:「3.2 算法11:LSA」第 65 段(text/16-ch03-02-3-2-11-lsa.txt:65,搜「2.24」)与第 78~79 段(text/16-ch03-02-3-2-11-lsa.txt:79,搜「息的重要度从大到小排列」)。

  22. 出处:「3.2 算法11:LSA」第 201 段(text/16-ch03-02-3-2-11-lsa.txt:201,搜「叫作奇异值分解的技术」);「两个正交矩阵和一个对角矩阵的乘积」的定义见附录名词表第 378 段(text/27-apx.txt:378,搜「两个正交矩阵和一个对角矩阵」)。

  23. 出处:「3.2 算法11:LSA」第 196 段(text/16-ch03-02-3-2-11-lsa.txt:196,搜「约 67% 的原始数据的信息」)。

  24. 出处:「附录」第 337 段(text/27-apx.txt:337,搜「可以根据给定的数据点推测出来的变量」)。

  25. 出处:「3.2 算法11:LSA」第 203~210 段(text/16-ch03-02-3-2-11-lsa.txt:205,搜「NMF 和 LDA 等算法的结果更容易」;text/16-ch03-02-3-2-11-lsa.txt:208,搜「非常大的矩阵上进行奇异值分解」;text/16-ch03-02-3-2-11-lsa.txt:210,搜「模型的更新难度很大」)。 2

  26. 出处:「3.3 算法12:NMF」第 4 段(text/17-ch03-03-3-3-12-nmf.txt:4,搜「非负矩阵分解」)与第 6 段(text/17-ch03-03-3-3-12-nmf.txt:6,搜「模型的可解释性强」)。

  27. 出处:「3.3 算法12:NMF」第 10 段(text/17-ch03-03-3-3-12-nmf.txt:10,搜「文本挖掘、推荐等各个领域」)。

  28. 出处:「3.3 算法12:NMF」第 14~16 段(text/17-ch03-03-3-3-12-nmf.txt:16,搜「这一约束条件」)。

  29. 出处:「3.3 算法12:NMF」第 20 段(text/17-ch03-03-3-3-12-nmf.txt:20,搜「主题 A 为 0.5、主题 B 为」)与第 23 段(text/17-ch03-03-3-3-12-nmf.txt:23,搜「就比较难解释」)。 2

  30. 出处:「3.3 算法12:NMF」第 24 段(text/17-ch03-03-3-3-12-nmf.txt:24,搜「潜在变量必须正交」)与第 28~30 段(text/17-ch03-03-3-3-12-nmf.txt:30,搜「无法找到所有数据块的特征」)。

  31. 出处:「3.3 算法12:NMF」第 37~38 段(text/17-ch03-03-3-3-12-nmf.txt:37,搜「选择比 d 小的 r 就可以进行降维」)。

  32. 出处:「3.3 算法12:NMF」第 52 段(text/17-ch03-03-3-3-12-nmf.txt:52,搜「交替更新 W 和 H」)。

  33. 出处:「3.3 算法12:NMF」第 106 段(text/17-ch03-03-3-3-12-nmf.txt:106,搜「2429 张」)、第 109 段(搜「49 个潜在变量」)、第 118~119 段(text/17-ch03-03-3-3-12-nmf.txt:119,搜「49 行 361 列矩阵的乘积」)。

  34. 出处:「3.3 算法12:NMF」第 123~125 段(text/17-ch03-03-3-3-12-nmf.txt:124,搜「听上去是不是有些奇怪」;text/17-ch03-03-3-3-12-nmf.txt:125,搜「人脸的部分特征」)。

  35. 出处:「3.1 算法10:PCA」第 95 段(text/15-ch03-01-3-1-10-pca.txt:95,搜「-2.68420713」)。