¿Cómo se calcula una mejor línea de ajuste en python, y, a continuación, una gráfica en un diagrama de dispersión en matplotlib?

Era yo el calcular el lineal de la mejor línea de ajuste mediante mínimos Cuadrados Ordinarios de Regresión de la siguiente manera:

from sklearn import linear_model
clf = linear_model.LinearRegression()
x = [[t.x1,t.x2,t.x3,t.x4,t.x5] for t in self.trainingTexts]
y = [t.human_rating for t in self.trainingTexts]
clf.fit(x,y)
regress_coefs = clf.coef_
regress_intercept = clf.intercept_      

Este es multivariante (hay muchos valores de x para cada caso). Por lo tanto, X es una lista de listas, y y es una sola lista.
Por ejemplo:

x = [[1,2,3,4,5], [2,2,4,4,5], [2,2,4,4,1]] 
y = [1,2,3,4,5]

Pero ¿cómo puedo hacer esto con orden superior funciones polinómicas. Por ejemplo, no sólo lineal (x a la potencia de M=1), pero el binomio (x a la potencia de M=2), cuadráticas (x a la potencia de M=4), y así sucesivamente. Por ejemplo, ¿cómo puedo obtener el mejor ajuste de las curvas a partir de los siguientes?

Extraído de Christopher Obispos del «Reconocimiento de patrones y Aprendizaje de Máquina», pág.7:

Multivariante (polinomio) es la que mejor se ajuste a la curva en python?

InformationsquelleAutor Zach | 2012-08-08

1 Comentario

  1. 25

    La aceptó responder a esta pregunta
    proporciona un pequeño multi poli ajuste de la biblioteca que va a hacer exactamente lo que usted necesita el uso de numpy, y puede enchufar el resultado en la representación, tal como la he descrito a continuación.

    Usted acaba de pasar en las matrices x e y de los puntos y el grado(orden) de ajuste que requieren en multipolyfit. Este devuelve los coeficientes que se puede utilizar para planear el uso de numpy del polyval.

    Nota: El siguiente código ha sido modificado para hacer multivariante de montaje, pero la trama de la imagen era parte de la anterior, no multivariante respuesta.

    import numpy
    import matplotlib.pyplot as plt
    import multipolyfit as mpf
    
    data = [[1,1],[4,3],[8,3],[11,4],[10,7],[15,11],[16,12]]
    x, y = zip(*data)
    plt.plot(x, y, 'kx')
    
    stacked_x = numpy.array([x,x+1,x-1])
    coeffs = mpf(stacked_x, y, deg) 
    x2 = numpy.arange(min(x)-1, max(x)+1, .01) #use more points for a smoother plot
    y2 = numpy.polyval(coeffs, x2) #Evaluates the polynomial for each x2 value
    plt.plot(x2, y2, label="deg=3")

    Multivariante (polinomio) es la que mejor se ajuste a la curva en python?


    Nota: Esta fue parte de la respuesta anterior, es pertinente si usted no tiene multivariante de datos. En lugar de coeffs = mpf(..., uso coeffs = numpy.polyfit(x,y,3)

    Para no multivariante conjuntos de datos, la forma más sencilla de hacerlo es, probablemente, con numpy del polyfit:

    numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

    Menos plazas polinomio de ajuste.

    Ajuste de un polinomio p(x) = p[0] * x**deg + ... + p[deg] de grado deg a los puntos de (x, y). Devuelve un vector de coeficientes de p que minimiza el error cuadrático.

    • ¿Cómo se aplica esto a multivariante de regresión? Ya tengo varias x-variables (5 para cada caso), tengo una de 2 dimensiones de la matriz (una lista de listas) para x. Mi x se parece a esto: [[1,2,3,4,5],[2,3,4,5,6],..]. Inputing que en su respuesta, tengo TypeError: expected 1D vector for x.
    • Son estos conjuntos independientes de datos para ser analizados por separado o combinados? ¿Qué significan los valores de y parecen?
    • He editado mi pregunta original para responder a tu comentario. Se trata de un único conjunto de datos. Quiero retroceder varios valores (funciones, variables independientes), por ejemplo, [x1,x2,x3,x4], con un único valor de y, PARA CADA CASO. Cada lista de x coincide con el correspondiente valor de y. Es mutivariate de regresión.
    • Oh. Esa es una cuestión muy diferente de la formulación original, a continuación,.
    • Pruebe el script vinculado en respuesta aquí: stackoverflow.com/questions/2799491/…
    • Gracias por la buena respuesta con los enlaces.
    • ¿De dónde viene el módulo de multipolyfit vienen? Al intentar importar el resultado es un error de importación de: ImportError: No module named multipolyfit.multipolyfit
    • en los enlaces de pregunta y respuesta (primer enlace en esta respuesta), un usuario ha escrito una pequeña función de utilidad para hacer esto: github.com/mrocklin/multipolyfit
    • Ah, gracias mucho!
    • Me acabo de dar cuenta de esta pregunta. He actualizado la organización de la repo, se ha agregado una permisiva licencia de fuente abierta, y la publicó en PyPi. Usted debe ser capaz de easy_install multipolyfit .
    • Yo estoy haciendo un TypeError: sólo puede concatenar tupla (no «int») a la tupla de error para la línea stacked_x = numpy.array([x,x+1,x-1]).

Dejar respuesta

Please enter your comment!
Please enter your name here