我想实现的单数值分解(SVD)在PHP.我知道,有几个外部图书馆,它可以这样做,对我来说。但我有两个问题有关的PHP,但:1)你是否认为这是可能的和/或合理的码的SVD在PHP?2)如果(1)是:你能帮我码it in PHP?

我已经编码的某些部分的SVD通过自己。 这里的代码 我提出了评论意见的行动。一些零部件的这种代码并不完全正确的。

这将是巨大的,如果你能帮助我。非常感谢你在前进!

有帮助吗?

解决方案

SVD-蟒 是一个非常明确的,吝啬的实施SVD的。 这实际上是伪代码,应该很容易理解 和比较/绘制你的PHP实现,即使你不知道很多蟒蛇。

SVD-蟒

这是说,正如其他人所说,我不会期望能够做得很重型LSA用PHP实现什么听起来像是一个相当有限的主网络。

干杯

编辑:   该模块上面并没有全部由自己做任何事情,但包含在一个例子 开放的意见。假设你下载的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”包含您的奇异值的列表。点击 当然,这只是让你对潜在语义分析及其亲属方式的一部分。 通常你想减少奇异值的数量,然后采用一些适当的距离 指标来衡量你的文件,或文字,或文档和文字等之间的相似性 您的合成矢量之间的角度的余弦值是相当流行的。

潜在语义映射(PDF)

是迄今最清晰,最简洁,最翔实的论文,我对其余的步骤阅读 需要制定出SVD以下。

EDIT2:也请注意,如果你有非常大的术语文档矩阵的工作(我假设这 是你在做什么),那么几乎可以肯定将是更为有效的进行分解 在离线模式,然后响应请求在现场的方式执行只有比较。 而SVD-蟒蛇是伟大的学习,该svdlibc更是你想什么那么重 计算

终于如上面的bellegarda本文所提到的,记住,你不必重新计算 SVD每一次你得到一个新的文档或请求。这取决于你正在尝试做的你可以 可能逃脱每隔一周左右进行一次SVD,在离线模式下,本地机器, 然后上传结果(大小/带宽问题尽管)。

反正好运气!

其他提示

当你说“我不在乎的时限是什么”小心点。 SVD是O(N^3)操作(或O(MN^2)如果它是一个长方形的m*n矩阵),这意味着你可以很容易地在一种情况,您的问题可能需要很长的时间。如果100 * 100的情况下需要一分钟,1000 * 1000的情况下将10 ^ 3分钟,或近17小时(而且很可能更糟糕,实际上呢,因为你很可能会被淘汰缓存)。随着像PHP,前因子 - 为了计算所需的FLOP计数N^3乘以数量,可能是非常非常大的。

说了这么多,当然有可能在PHP代码 - 语言具有所需的数据结构和操作。

我知道这是一个古老的Q,但这里是我的2位:

1)真正的SVD是比所使用的演算启发近似值,例如,在Netflix的奖金慢得多。请参阅: http://www.sifter.org/~simon/journal/20061211.html

这里有一个实现(C)位置: http://www.timelydevelopment.com/demos/NetflixPrize.aspx

2)C会更快但PHP当然可以做到这一点。

PHP建筑师卡尔作者埃文斯:“PHP是一种Web脚本语言......但我已经使用PHP作为脚本语言编写的DOS等效的批处理文件或Linux相当于shell脚本我有。发现大多数的什么,我需要做的可以在PHP中完成。甚至有一个项目,让您可以通过PHP的PHP-GTK项目构建桌面应用程序。“

关于问题1:这肯定是可能的。无论是合理取决于您的情况:有多大的矩阵?你经常要运行的代码?它是在一个网站或在命令行中运行? 如果你对速度的关心,我会建议写一个包装的简单扩展调用到 GNU科学图书馆

是的,它是更多钞票,但执行SVD在php载的最佳做法。你可以在这里看到PHP慢于C和也慢于C++,所以也许最好还是如果你能做这个的语言和呼吁它们作为一个功能得到你的结果。你可以找到一个实现的算法 在这里,, 所以你可以指导自己的低谷。

关于功能的电话可以使用:

  • Exec()Function

该系统的功能是非常有用的和强大的,但最大的问题之一是由此产生的所有文本从计划直接进入输出流。会有的情况下,你可能会喜欢的格式生成的文本,并显示它在一些不同的方式,或者不显示它在所有。

  • 该系统()Function

该系统的功能在PHP需要一字符串参与执行命令,以及任何论点你希望通过这命令。这一功能执行指定的命令,并转储的任何由此产生的文本的输出流(无论是HTTP出在一个网络服务器的情况,或如果控制台运行PHP作为命令行工具)。返回这个功能是最后的线的输出从程序,如果它发出的文字输出。

  • The passthru()Function

一个迷人的功能,PHP提供类似于那些我们迄今所看到的中继功能。这种功能,其他人一样,执行该程序,你告诉它。然而,它然后进行,以立即发送的原输出从这一计划输出流与其PHP目前的工作(即HTTP在网络服务器方案,或壳的命令行版本PHP)。

  1. 是的。这是完全有可能实现在PHP.我不知道什么是合理时间框架的执行和如何大它可以计算。我可能会实现的算法得到rought的想法。

  2. 是的,我可以帮助你的代码。但是,为什么你需要帮助吗?不你写的代码的工作?

只是作为一个拨出的问题。哪个版本的PHP你使用?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top