SVD Python
是一个非常清晰、节俭的SVD实现。
它实际上是伪代码,应该相当容易理解
对PHP实现进行比较/借鉴,即使您不太了解Python。
也就是说,正如其他人提到的那样,我不希望能够对PHP实现执行非常繁重的LSA,这听起来像是一个相当有限的Web主机。
干杯
编辑:
上面的模块本身不做任何事情,但是在
开场白。假设您下载了python模块,并且可以访问它(例如,在同一个文件夹中),那么
可以实现一个简单的示例,如下所示,
#!/usr/bin/python
import svd
import math
a = [[22.,10., 2., 3., 7.],
[14., 7.,10., 0., 8.],
[-1.,13.,-1.,-11., 3.],
[-3.,-2.,13., -2., 4.],
[ 9., 8., 1., -2., 4.],
[ 9., 1.,-7., 5.,-1.],
[ 2.,-6., 6., 5., 1.],
[ 4., 5., 0., -2., 2.]]
u,w,vt = svd.svd(a)
print w
这里“w”包含您的奇异值列表。
当然,这只会让您成为潜在语义分析及其相关分析的一部分。
您通常希望减少奇异值的数量,然后使用适当的距离
度量您的文档或单词、文档和单词等之间的相似性。
结果向量之间夹角的余弦非常流行。
是迄今为止我读过的关于你剩下的步骤的最清晰、最简洁和最具信息性的论文。
需要根据SVD进行锻炼。
edit2:还要注意,如果你使用的是非常大的文档矩阵(我假设
这是您正在做的)几乎可以肯定地说,执行分解会更有效率。
在离线模式下,然后根据请求仅以实时方式执行比较。
虽然svd python非常适合学习,但是svdlibc更适合学习这么重的内容。
计算。
最后,正如上面的Bellegarda论文中提到的,记住您不必重新计算
每次收到新文档或请求时,SVD都会出现。取决于你想做什么,你可以
可能每周执行一次SVD,在离线模式下,本地机器,
然后上传结果(尽管存在大小/带宽问题)。
不管怎样,祝你好运!