Pregunta

Me gustaría poner en práctica la Descomposición de Valor Singular (SVD) en PHP.Sé que hay varias librerías externas que se podía hacer esto por mí.Pero tengo dos preguntas sobre PHP, aunque:1) ¿crees que es posible y/o razonable para el código de la enfermedad vesicular porcina en PHP?2) si (1) Si es sí:Me pueden ayudar el código en PHP?

Ya he codificación de algunas partes de enfermedad vesicular porcina por mí mismo. Aquí está el código que he hecho comentarios al curso de acción.Algunas partes de este código no es totalmente correcta.

Sería muy bueno si usted me podría ayudar.Muchas gracias de antemano!

¿Fue útil?

Solución

SVD-pitón Es una aplicación muy claro, parsimoniosa de la SVD. Es prácticamente psuedocode y debería ser bastante fácil de entender y comparar / dibujar encendido para su aplicación PHP, incluso si usted no sabe mucho pitón.

SVD-pitón

Una vez dicho esto, como otros han mencionado que no me esperaba ser capaz de hacer LSA de alta resistencia con aplicación muy php lo que suena como una red huésped bastante limitado.

Saludos

Editar:   El módulo anterior no hace nada por sí mismo, pero hay un ejemplo que se incluye en el la apertura de los comentarios. Suponiendo que se ha descargado el módulo de Python, y era accesible (por ejemplo, en la misma carpeta), se podría implementar un ejemplo trivial como sigue:

#!/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

A continuación, 'w' contiene su lista de valores singulares.
Por supuesto, esto sólo se consigue que una parte del camino para el análisis semántico latente y sus familiares. Normalmente se desea reducir el número de valores singulares, a continuación, emplear alguna distancia apropiada métrica para medir la similitud entre sus documentos, o las palabras o documentos y palabras, etc. El coseno del ángulo entre los vectores resultantes es bastante popular.

Latent Semantic Mapping (pdf)

es, con mucho, el papel más clara y concisa e informativa que he leído en los pasos restantes que se necesitar trabajar a cabo después de la enfermedad vesicular porcina.

Edit2: también en cuenta que si se trabaja con matrices muy grandes término-documento (estoy suponiendo que esto es lo que está haciendo) que es casi seguro que va a ser mucho más eficiente para llevar a cabo la descomposición en un modo sin conexión y, a continuación, realizar sólo las comparaciones de un modo directo en respuesta a las solicitudes. mientras SVD-pitón es ideal para el aprendizaje, la svdlibc es más de lo que usted quiere para tan pesada cálculo.

finalmente, como se menciona en el documento bellegarda anterior, recuerde que usted no tiene que volver a calcular la SVD cada vez que reciba un nuevo documento o petición. dependiendo de lo que está tratando de hacer que usted podría probablemente salirse con la realización de la enfermedad vesicular porcina, una vez cada semana o así, en un modo fuera de línea, una máquina local, y después de subir los resultados (tamaño preocupaciones / ancho de banda no obstante).

de todos modos buena suerte!

Otros consejos

Tenga cuidado cuando usted dice "No me importa lo que los plazos son". SVD es una operación O(N^3) (o O(MN^2) si se trata de una matriz rectangular m*n) lo que significa que fácilmente se podría estar en una situación en la que su problema puede tomar un tiempo muy largo. Si el caso 100 * 100 toma un minuto, el caso 1000 * 1000 sería 10 ^ 3 minutos, o casi 17 horas (y probablemente peor, de manera realista, ya que es muy probable que estar fuera de caché). Con algo como PHP, el prefactor -. El número multiplicando el N^3 con el fin de calcular el recuento FLOP requerido, podría ser muy, muy grande

Una vez dicho esto, por supuesto que es posible codificar en PHP - el lenguaje tiene las estructuras de datos y operaciones requeridas.

Sé que esto es un viejo Q, pero aquí está mi 2-bits:

1) Un verdadero SVD es mucho más lento que las aproximaciones de cálculo de inspiración utilizados, por ejemplo, en el premio Netflix. Ver: http://www.sifter.org/~simon/journal/20061211.html

Hay una aplicación (en C) aquí: http://www.timelydevelopment.com/demos/NetflixPrize.aspx

2) C sería más rápido, pero PHP sin duda puede hacerlo.

PHP Arquitecto autor Cal Evans: "PHP es un lenguaje de programación web ... [pero] He utilizado PHP como lenguaje de script para escribir el equivalente DOS de archivos por lotes o el equivalente Linux de secuencias de comandos shell tengo. encontró que la mayor parte de lo que tengo que hacer se puede realizar desde dentro de PHP. incluso hay un proyecto que le permite crear aplicaciones de escritorio a través de PHP, el proyecto PHP-GTK ".

Sobre la pregunta 1: Definitivamente es posible. Ya sea razonable depende de su escenario: ¿Cuán grandes son sus matrices? ¿Con qué frecuencia va a ejecutar el código? Es que se ejecute en un sitio web o desde la línea de comandos? Si lo hace la atención acerca de la velocidad, sugeriría escribir un simple extensión que envuelve las llamadas a la GNU Scientific Library .

Sí, es posible, pero la aplicación de enfermedad vesicular porcina en php ins no es el enfoque óptimo.Como se puede ver aquí PHP es más lento que C y también más lento que C++, por lo que tal vez era mejor si usted podría hacerlo en uno de estos lenguajes y llamar a ellos como una función para obtener sus resultados.Usted puede encontrar una implementación del algoritmo de aquí, así que usted puede guiarte a través.

Acerca de la función de llamadas puede utilizar:

  • El exec() Función

La función del sistema es muy útil y potente, pero uno de los mayores problemas es que todo el texto resultante de que el programa va directamente a la secuencia de salida.Habrá situaciones en las que usted podría dar formato al texto resultante y mostrar en alguna forma diferente, o que no se muestre en absoluto.

  • El sistema() Función

La función del sistema en PHP que toma un argumento de cadena con el comando a ejecutar así como los argumentos que usted desea pasar a ese comando.Esta función ejecuta el comando especificado, y los vertederos de cualquier texto resultante en el flujo de salida (el HTTP de salida en un servidor web con la situación, o a la consola si está ejecutando PHP como una herramienta de línea de comandos).El retorno de esta función es la última línea de la salida del programa, si se emite el texto de salida.

  • El passthru() Función

Uno de los fascinantes función que PHP ofrece similares a los que hemos visto hasta ahora es la passthru función.Esta función, como los demás, se ejecuta el programa que se le indica.Sin embargo, procede a enviar inmediatamente la salida raw de este programa para el flujo de salida con el que PHP está trabajando actualmente (es decir,HTTP en un servidor web escenario, o el shell en una versión de línea de comandos de PHP).

  1. Sí. esto es perfectamente posible ser implementado en PHP. No sé lo que el marco de tiempo razonable para su ejecución y lo grande que puede calcular. Probablemente tendría que aplicar el algoritmo para obtener una idea rought.

  2. Si puedo ayudarle a codificarlo. Pero, ¿por qué necesitas ayuda? No el código que escribió trabajo?

Así como una cuestión aparte. ¿Qué versión de PHP se utilizan?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top