其他章节答案请参考我的汇总统计学习方法答案汇总,都是自己写的。
1、试将图17.1的例子进行潜在语义分析,并对结果进行观察。
解:
使用奇异值分解算法进行分析,该矩阵的阶数比较低,使用梯度下降算法感觉会麻烦一点,还可能无法达到最优解。
程序是:
import numpy as np
def solution(A):
U,S,V_T = np.linalg.svd(A)
return U, S, V_T
if __name__ == '__main__':
A = np.array([[2,0,0,0],
[0,2,0,0],
[0,0,1,0],
[0,0,2,3],
[0,0,0,1],
[1,2,2,1]])
u,s,v_t = solution(A)
print(u)
print(s)
print(v_t)
程序输出的单词话题矩阵是:
我们看第一列,第四行,也就索引3对应的那一行,0.728805似乎是表示了单词apple的重要性,因为单词向量矩阵使用的是词频来表示的,apple在所有的文档里面出现了5次,单词produce出现了6次,对应0.62919,所以第一列的元素似乎在某种程度上展示了各个单词的重要性。
奇异值分解得到的左矩阵v_t:
可以看到第三列和第四列的第一个元素,0.638515,0.661934,分别对应了文本3和4分别出现了5个单词,而文本1和2分别出现了3,4个单词,对应的值也是有对应的大小。
程序输出的话题文本矩阵是:
2、给出损失函数是散度损失时的非负矩阵分解(潜在语义分析)算法。
解:
算法:
输入: 单词文本矩阵
X
≥
0
X \ge0
X≥0,文本集合的话题个数
k
k
k,最大的迭代次数t
输出: 话题矩阵
W
W
W,文本表示矩阵
H
H
H。
-
初始化
W ≥ 0 W\ge0 W≥0,并对 W W W的每一列数据归一化;
H ≥ 0 H\ge0 H≥0; -
迭代
对迭代次数从1到t执行下列步骤:
(a)按照公式 H l j ⟵ H l j ∑ i W i l X i j / ( W H ) i j ∑ i W i l H_{lj}\longleftarrow H_{lj}\frac{\sum_{i}W_{il}X_{ij}/(WH)_{ij} }{\sum_{i}W_{il} } Hlj⟵Hlj∑iWil∑iWilXij/(WH)ij对 l l l从1到 k k k, j j j从1到 n n n更新 H l j H_{lj} Hlj
(b)按照公式 W i l ⟵ W i l ∑ j H l j X i j / ( W H ) i j ∑ j W l j W_{il}\longleftarrow W_{il}\frac{\sum_{j}H_{lj}X_{ij}/(WH)_{ij} }{\sum_{j}W_{lj} } Wil⟵Wil∑jWlj∑jHljXij/(WH)ij对 l l l从1到 k k k, i i i从1到 m m m更新 W i l W_{il} Wil.
注意:如果要亲自写程序实现上面的算法的话,需要小心一下新旧变量的更新次序。
3、给出潜在语义分析的两种算法的计算的复杂度,包括奇异值分解法和非负矩阵分解法。
解:
说一下我自己的想法吧,本科学的很多矩阵分解的数值计算方法都忘了
奇异值的分解算法:
(a)首先,计算一个n阶方阵的特征值的算法复杂度一般是
O
(
n
3
)
O(n^{3})
O(n3),因为需要先计算行列式,计算行列需要
O
(
n
3
)
O(n^{3})
O(n3),计算多项式的根也很复杂,然后计算特征值对应的特征向量,解线性方程组需要
O
(
n
2
)
O(n^{2})
O(n2),计算n个特征值的复杂度最坏是
O
(
n
3
)
O(n^{3})
O(n3)
(b)对于截断的奇异值分解也是类似的,可能需要将方阵修改一下,然后在改下话题的个数
k
k
k。
非负矩阵分解算法:
根据上面的第二题的非负矩阵分解算法的我们可以写出伪代码算法:如下
for t = 1,...,T:
for l = 1,2,...,k:
for i = 1,2,...,m:
更新W
for l = 1,...,k:
for j = 1,2,...,n:
更新H
我们根据上面伪代码可以看到,现在明确可以看到的已经出现了3重循环了,其实还有一个隐含的循环,在计算新的参数进行更新的时候,因而复杂度如下: O ( T ∗ k ∗ m a x ( m , n ) ∗ m a x ( m , k ) ) O(T*k*max(m,n)*max(m,k)) O(T∗k∗max(m,n)∗max(m,k))
4、列出潜在语义分析和主成分分析的异同。
解:
同:
1、都可以使用奇异值的分解算法
2、用于数据的降维
异:
1、主成分分析需要使用奇异值分解严格的计算的特征值和特征向量,但是潜在语义分析计算的两个矩阵W,H并不一定是经过奇异值分解得到的是一样的,非负矩阵分解得到的解是不唯一的。这样就显得不是很严格,随便得到一个近似矩阵就可以。
2、潜在语义分析得到的单词文本矩阵对比主成分分析的数据矩阵来说稀疏性比较大