44 | 奇异值分解:如何挖掘潜在的语义关系?
44 | 奇异值分解:如何挖掘潜在的语义关系?
讲述:黄申
时长13:00大小11.88M
方阵的特征分解
矩阵的奇异值分解
潜在语义分析和 SVD
总结
思考题
赞 2
提建议
精选留言(17)
- 南边2020-01-16把 V 的这 n 个特征向量进行标准化处理,那么对于每个特征向量 Vi,就有 ∣∣Vi∣∣2=1,而这表示 V’iVi=1,此时 V 的 n 个特征向量为标准正交基,满足 V’V=I , 也就是说 V 为酉矩阵 对于V是酉矩阵这个推导还是不太理解
作者回复: x1...xn标准化之后,就意味着数据的分布呈现标准正态分布,均值为0,标准差为1。所有就有(x1-0)^2+...+(xn-0)^2=1,也就是∣∣Vi∣∣2=1。所以V'iVi=1,而这个1正好是矩阵V'V对角线上的值,对角线上全部为1,其他值全为0,所以V'V = I(单位矩阵)
共 3 条评论2 - qinggeouye2019-04-03import numpy as np from numpy import linalg as la # 文档集合 文档和词条关系矩阵 行表示文档 列表示词条 x = np.mat([[1, 1, 1, 0, 0], [2, 2, 2, 0, 0], [1, 1, 1, 0, 0], [5, 5, 5, 0, 5], [0, 0, 0, 2, 2], [0, 0, 0, 3, 3], [0, 0, 0, 1, 1]]) U, sigma, VT = la.svd(x) print(U, "\n") print(sigma, "\n") print(VT, "\n") S = np.zeros((7, 5)) # 奇异矩阵 for i in range(len(sigma)): S[i, i] = sigma[i] print(" 与矩阵 x 一致? \n", U.dot(S).dot(VT.transpose())) 这里计算出的左奇异矩阵、奇异值矩阵、右奇异值矩阵,以及它们的点乘,与本文中的都不太一样,不知哪里出问题了?展开
作者回复: 你原来的代码里有两个误输入, 1. x矩阵中的[5, 5, 5, 0, 5]应该是[5, 5, 5, 0, 0] 2.print(" 与矩阵 x 一致? \n", U.dot(S).dot(VT.transpose()))应该是print(" 与矩阵 x 一致? \n", U.dot(S).dot(VT)),这里VT已经转置过了。 这样得到的奇异值是[9.64365076e+00 5.29150262e+00 7.52989891e-16 0.00000000e+00 0.00000000e+00],后面3个接近0,忽略不计
共 2 条评论2 - Paul Shan2019-10-11文档例子和svd分解有差别,svd是左右为方阵,中间为非方阵。文档例子是中间为方阵,左右为方阵,我感觉这里缺了一步,是不是文档的例子已经是降维后的结果了?
作者回复: 你是指最后的文档集合的那个例子?对,这是分解后的结果
共 2 条评论1 - 0139232022-09-15 来自上海学习了新知识,谢谢!
- !null2021-08-30U 是一个 m×m 维的矩阵,V 是一个 n×n 维的矩阵。而 Σ 是一个 m×n 维的矩阵 上边m×m和n×n意思是m阶和n阶方阵吗?如果是,为什么lsa的例子里,就是计算机文档和医学文档的例子里,U和V都不是方阵,而 Σ 是个方阵?
作者回复: 这是因为后面的奇异值都为0,当然计算机文档和医学文档的例子是理想状况。实际数据中,往往还有较小的奇异值在后面,所以Σ矩阵不是2x2
- !null2021-08-30σ[i]=(X*v[i])/u[i] 这个公式后边怎么算没看懂。X应该是最开始的矩阵,v[i]和u[i]是特征向量吗?那X*u[i]结果应该也是向量。最后就是两个向量之间做除法。向量间除法应该怎么算?
作者回复: 元素对应的除法
- !null2021-08-23其中 U 是一个 m×m 维的矩阵,V 是一个 n×n 维的矩阵。而 Σ 是一个 m×n 维的矩阵,对于 Σ 来说,只有主对角线之上的元素可以为非 0,其他元素都是 0,而主对角线上的每个元素就称为奇异值。 后边“计算机文档和医学文档”奇异值分解之后,没觉得U是 m×m 维的矩阵,V 是一个 n×n 维的矩阵,Σ 是一个 m×n 维的矩阵。如果Σ有对角线的话,是不是Σ 应该是个方阵?
作者回复: Σ通常不是方阵,其对角线是由Σ(i,i)组成。
- marcus18772021-03-31“第三步,对 SVD 分解后的矩阵进行降维,这个操作和 PCA 主成分分析的降维操作是类似的。” 是对SVD分解后的U,V',∑ 降维吗?
作者回复: 具体来说,是利用U,V',∑,对原始的矩阵进行降维。比如原来的矩阵是100万用户对应10万商品的关系,那么降维后,可以看做是1万用户组对应1000商品的关系这种。
- 建强2020-11-29思考题:请教一下老师,SVD中的奇异值矩阵,能否用U'XV来计算,因为UU'=I, 所以对于等式X = UΣV',分别用U'和V对等式两边进行左乘和右乘,就得到Σ = U'XV,不知这样推导是否正确? 用Python简单写了一个SVD分解的程序,源代码如下: def SVD_Solve(X): # 计算U矩阵 = XX'的特征矩阵 U = X.dot(X.T) U_feature, U_vector = LA.eig(U) # 计算V矩阵 = X'X的特征矩阵 V = X.T.dot(X) V_feature, V_vector = LA.eig(V) # 计算西格码对角矩阵 = U'XV XGM = (U_vector.T.dot(X)).dot(V_vector) return U_vector, XGM, V_vector.T #测试 X = mat([[1,1,1,0,0] ,[2,2,2,0,0] ,[1,1,1,0,0] ,[5,5,5,0,0] ,[0,0,0,2,2] ,[0,0,0,3,3] ,[0,0,0,1,1] ] ) U,XGM,V = SVD_Solve(X) print("左奇异向量\n","="*10, "\n", U) print("奇异值矩阵\n","="*10, "\n", XGM) print("右奇异向量\n","="*10, "\n", V)展开
作者回复: 确实是这样的,你可以比较这个程序的输出,和Python sklearn等库输出的结果,看看是否一致
- 米饭2020-08-31“把 V 的这 n 个特征向量进行标准化处理,那么对于每个特征向量 Vi,就有 ∣∣Vi∣∣2=1,而这表示 V’iVi=1,此时 V 的 n 个特征向量为标准正交基,满足 V’V=I , 也就是说 V 为酉矩阵” 这里其实是先标准化,再归一化 V为特征矩阵,V_i为特征向量,标准化后V_i向量成正态分布,均值为0,标准差为1,方差也为1,此时|| V_i ||_2 = n(即标准化后的向量模为n)。 再将标准化后的向量归一化为标准化向量(即单位向量,模为1),求一个向量的标准化向量,本质是让这个向量与自身的模相除,所以再除以n 最后得到标准化向量 || V_i ||_2 = 1 所以 (|| v_i ||_2)的平方 = 1,即 V'_iV' = 1 所以V的每一列都是单位向量,才满足标准正交基的定义 参考: https://www.cnblogs.com/shine-lee/p/11779514.html展开
- 不接地气的马三岁2020-07-21算方差的时候,不应该还有个1/N吗,N是元素个数,(x1-0)^2+...+(xn-0)^2为什么不等于N。
作者回复: 你好,这个问题是针对PCA分析还是SVD分解?
共 3 条评论 - 骑行的掌柜J2020-07-09又get到一个新的知识点 奇异值SVD😁虽然有疑惑这里“就有 ∣∣Vi∣∣2=1,而这表示 V’iVi=1,此时 V 的 n 个特征向量为标准正交基” 不过已经有好几个朋友提问出来 老师也解答了 剩下就是熟练这个过程 谢谢黄老师 PS: 如果有SVD奇异值分解项目案例就更好了
作者回复: 后面实战部分有一个案例供你参考
- 罗耀龙@坐忘2020-05-18茶艺师学编程 到这里,总算看到了在大学时算的死去活来的求逆矩阵、矩阵相乘、矩阵变换的一个应用……
作者回复: 哈哈,结合运用才能体会最深刻
- 灰太狼2020-04-06如果我们会把 V 的这 n 个特征向量进行标准化处理,那么对于每个特征向量 V_i,就有 ||V_i||_2=1,而这表示 V’_iV_i=1,此时 V 的 n 个特征向量为标准正交基,满足 V’V=I , 也就是说 V 为酉矩阵,有 V’=V^{-1} 。这样一来,我们就可以把特征分解表达式写作 X=VΣV’。 -------------------------- 黄老师,接着上一个问题,我还是有点疑问,这个地方特征向量进行了标准化,这个标准化是在原始矩阵上对每个列向量进行的标准化吗?还是在哪儿做的标准化?如果原始矩阵没做标准化,求出特征向量后又进行标准化那应该不再是原始矩阵的特征向量了吧?展开
作者回复: 通常标准化是在列向量上(这里假设每列对应一个特质,每行对应一个训练样本)。这样标准化之后,不同样本的同一个属性值就近似正态分布。 另外,一般是先对原始矩阵做标准化,再进行特征向量的求解。
- 灰太狼2020-04-03如果我们会把 V 的这 n 个特征向量进行标准化处理,那么对于每个特征向量 V_i,就有 ||V_i||_2=1,而这表示 V’_iV_i=1,此时 V 的 n 个特征向量为标准正交基,满足 V’V=I , -------------- 黄老师,这个地方有点没太看懂,请问这儿的标准化是在什么时候做的?如果不做标准化等式是不是就不成立了?
作者回复: 对,需要做标准化才能保证V'V = I。标准化之后,数据分布满足了标准正态分布,均值为0,方差和为1,所以sum((v-0)^2) = 1,也就是 ||V_i||_2=1
- wick2020-03-13老师好,文中奇异值 σ的求解,由XV=UΣ推出Xvi=σiui再到σi=uiXvi没懂
作者回复: 其实就是从矩阵换到每一行的情况
- Paul Shan2019-10-11方阵分解成正交阵 x 对角阵 x 正交阵转置 非方阵也可以做类似分解 这里的对角阵参数的大小反映了重组后分量的信息量