Tengo un montón de datos, generalmente en la forma
a, b, c, …, y

donde y = f(a, b, c…)

La mayoría de ellos son de tres y cuatro variables, y han 10k – 10M registros. Mi suposición general es que son algebraicas en la naturaleza, algo así como:

y = P1 a^E1 + P2 b^E2 + P3 c^E3

Por desgracia, mi último análisis estadístico de la clase era hace 20 años. ¿Cuál es la forma más sencilla de obtener una buena aproximación de f? Herramientas de código abierto, con una curva de aprendizaje mínima (es decir, algo donde pudiera recibir una buena aproximación en una hora o así) sería lo ideal. Gracias!

  • Con respecto al título, lo que es sencillo sobre multidimensional de ajuste de curvas? 🙂
  • prz.rzeszow.pl/~janand/Theory_of_LSM.pdf
  • Ortogonal distancia de regresión podría ser utilizado para el problema.
InformationsquelleAutor user64258 | 2009-02-09

6 Comentarios

  1. 12

    En caso de que sea útil, he aquí una Numpy/Scipy (Python) plantilla para hacer lo que quieres:

    from numpy import array
    from scipy.optimize import leastsq
    
    def __residual(params, y, a, b, c):
        p0, e0, p1, e1, p2, e2 = params
        return p0 * a ** e0 + p1 * b ** e1 + p2 * c ** e2 - y
    
    # load a, b, c
    # guess initial values for p0, e0, p1, e1, p2, e2
    p_opt = leastsq(__residual,  array([p0, e0, p1, e1, p2, e2]), args=(y, a, b, c))
    print 'y = %f a^%f + %f b^%f %f c^%f' % map(float, p_opt)
    

    Si usted realmente desea entender lo que está pasando, sin embargo, vas a tener que invertir el tiempo a escala de la curva de aprendizaje de alguna herramienta o entorno de programación – yo realmente no creo que haya alguna forma de evitar eso. La gente generalmente no escribir herramientas especializadas para hacer las cosas como 3-término de potencia regresiones exclusivamente.

    • scipy.odr (ortogonal distancia de regresión) podría ser útil si a, b, c no tienen precisión infinita (el de mínimos cuadrados se supone infinita precisión de las coordenadas).
    • Seguramente la función requiere una muestra de la salida para minimizar hacia decir algunos ejemplos de valores de y dado un conjunto a, b, c valores?
  2. 3

    Hay una herramienta para el montaje 1D y 2D curvas en zunzun.com, pero creo que no va más allá de dos variables. Asimismo, Matlab no admite más de dos dimensiones de montaje (que yo sepa) y ciertamente no es libre.

    De lo contrario, usted podría ser capaz de encontrar parte de su solución en el Numerical Recipes.

    Pero como otros carteles indicado, probablemente necesitará al menos una idea básica de su función de modelo (que, esperemos, que es lineal, o puede ser lineal, en cuyo caso usted tendrá una mucho mayor variedad de soluciones a tu disposición)

    • NR sería uno de los más poderoso caminos a seguir, pero no es probable que una curva de aprendizaje mínima.
    • Estoy de acuerdo. Pero no creo que este es el tipo de problema donde no hay una salida fácil.
  3. 2

    Los fundamentos de ajuste de datos implican asumir una forma general de una solución, suponiendo algunos valores iniciales para las constantes y, a continuación, recorrer para minimizar el error de la adivinado solución para encontrar una solución específica, por lo general en el de mínimos cuadrados sentido.

    Mirar en R o Octava de herramientas de código abierto. Ambos son capaces de análisis de mínimos cuadrados, con varios tutoriales sólo una búsqueda en Google de distancia.

    Edición: Octava código para la estimación de los coeficientes de un polinomio de 2º orden

    x = 0:0.1:10;
    y = 5.*x.^2 + 4.*x + 3;
    
    % Add noise to y data
    y = y + randn(size(y))*0.1;
    
    % Estimate coefficients of polynomial
    p = polyfit(x,y,2)
    

    En mi máquina, me sale:

    ans =
    
       5.0886   3.9050   2.9577
    
    • Gracias, tengo…por eso dije «muy mínima curva de aprendizaje»! Esas son excelentes estadístico de propósito general idiomas, pero tienen una muy fuerte curva de aprendizaje (en mi humilde opinión).
    • Lo que yo veo. Me gustaría pensar que, con funciones simples, no se debe tomar demasiado tiempo para llegar a la velocidad con cualquiera de las herramientas, o incluso para hacer esto en Python o Perl.
    • Me gustaría pensar que son relativamente simples (he añadido el detalle de la pregunta), y ya he pasado una hora o así en Google, que es por qué me he vuelto aquí 😉
    • Por desgracia, polyfit solo funciona para un solo valor de las funciones f(x). El OP se menciona específicamente a los no-lineal multi-dimensional de montaje, que lo dudo Octava admite fuera de la caja.
    • Creo que no vas a conseguir mucho más sencillo que el de Octava de código (o Numpy/Scipy en Python, que tiene casi la misma sintaxis – consulte scipy.org ).
  4. 1

    ¿Sabes a lo que el poder desea limitar su polinomio?

    Si no hay límite, entonces siempre se puede obtener una coincidencia exacta para N puntos al igualar a un polinomio que tiene N los coeficientes. Para hacer esto, usted plug N diferentes puntos en la ecuación, dando N ecuaciones y N incógnitas (los coeficientes), que luego se puede utilizar ya sea simple álgebra de preparatoria o de una matriz para resolver las incógnitas.

    • +1, yo he leído en algún lugar que dispersa la cuadrícula de datos pueden ser utilizados para lograr el mismo polinomio exactitud con menor número de nodos que se requiere en la red normal de datos. ¿Sabe usted cómo es eso posible?
  5. 0

    Si usted tiene una conjetura en cuanto a la forma de f,[*] se necesita un minimizer para encontrar los parámetros óptimos. Las herramientas Scottie T sugiere iba a funcionar, como RAÍZ, y muchos otros.

    Si usted no tiene idea de qué formulario f puede tomar usted está en serios problemas, de hecho.


    [*] Que es, usted sabe que

    f = f(x,y,z,w,…;p1,p2,p3…)

    donde el ps son los parámetros y las coordenadas son x, y

  6. 0

    Respuesta corta: no es tan simple. Considere la posibilidad de un enfoque no paramétrico de los datos de los sub-conjuntos.

    Hay 2 temas principales que usted necesita para decidir acerca de: (1) Hacer que usted realmente se preocupan por los parámetros de la función, es decir, su P1, E1, …, o tendría que estar de acuerdo con las acaba de estimar la media de la función (2) ¿usted realmente necesita para estimar la función de todos los datos?

    La primera cosa que voy a mencionar es que su función no es lineal en los parámetros a ser estimados), de modo de mínimos cuadrados ordinarios no funciona. Vamos a suponer que usted especifica una función lineal. Usted todavía tiene un problema con el 10M valores. La regresión lineal se puede realizar de una manera eficiente el uso de la factorización QR, pero aún le quedan una O(p * n^2) algoritmo, donde p es el número de parámetros que están tratando de estimar. Si desea estimar la no-lineal de la media de la función se pone mucho peor.

    La única manera que usted va a ser capaz de estimar cualquier cosa en un gran conjunto de datos es mediante el uso de un subconjunto para realizar la estimación. Básicamente, se selecciona aleatoriamente un subconjunto y el uso que para la estimación de la función.

    Si usted no se preocupan por los valores del parámetro, y sólo quiere estimar la media de la función que probablemente será mejor que no paramétrico de estimación de la técnica.

    Esperemos que esto ayuda.

    leif

Dejar respuesta

Please enter your comment!
Please enter your name here