44 votos

Regresión polinomial usando scikit-learn

Estoy tratando de usar scikit-learn para la regresión polinomial. Por lo que he leído de regresión polinomial es un caso especial de la regresión lineal. Esperaba que tal vez uno de scikit de modelos lineales generalizados puede parametrizarse para ajuste de polinomios de orden superior, pero no veo ninguna opción para hacerlo.

Me las arreglé para utilizar un Vector de Apoyo Regresor con un poli kernel. Eso funcionó bien con un subconjunto de mis datos, pero se necesita mucho tiempo para adaptarse a conjuntos de datos más grandes, así que todavía necesita encontrar algo más rápido (incluso si el comercio de algunos de precisión).

Me estoy perdiendo algo que es obvio aquí?

43voto

Nakedible Puntos 198

La teoría de la

Regresión polinomial es un caso especial de la regresión lineal. Con la idea principal de cómo selecciona sus características. Buscando en la regresión multivariante con 2 variables: x1 y x2. La regresión lineal se parecerá a esto: y = a1 * x1 + a2 * x2.

Ahora usted quiere tener una regresión polinomial (vamos a hacer 2 grado del polinomio). Vamos a crear un par de características adicionales: x1*x2, x1^2 y x2^2. Así que vamos a obtener su 'regresión lineal':

y = a1 * x1 + a2 * x2 + a3 * x1*x2 + a4 * x1^2 + a5 * x2^2

Esta muy bien muestra un importante concepto de la maldición de la dimensionalidad, debido a que el número de nuevas características crece mucho más rápido que de forma lineal con el aumento del grado del polinomio. Usted puede tomar una mirada acerca de este concepto.

Práctica con scikit-learn

Usted no necesita hacer todo esto en scikit. Regresión polinomial ya está disponible (en 0.15 versión. Comprobar cómo actualizar aquí).

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model

X = [[0.44, 0.68], [0.99, 0.23]]
vector = [109.85, 155.72]
predict= [0.49, 0.18]

poly = PolynomialFeatures(degree=2)
X_ = poly.fit_transform(X)
predict_ = poly.fit_transform(predict)

clf = linear_model.LinearRegression()
clf.fit(X_, vector)
print clf.predict(predict_)

39voto

user11867 Puntos 21

Dado los datos de xx, un vector columna, y yy, el objetivo de vectores, se puede realizar la regresión polinomial anexando los polinomios de xx. Por ejemplo, considere si

x=[2113]

Utilizando sólo este vector en la regresión lineal implica el modelo:

y=α1x

Podemos agregar columnas que son potencias de los vectores anteriores, que representan la adición de polinomios a la regresión. A continuación mostramos esta para los polinomios de hasta una potencia de 3: X=[24811113132133]

Esta es nuestra nueva matriz de datos que utilizamos en sklearn de la regresión lineal, y representa el modelo:

y=α1x+α2x2+α3x3


Tenga en cuenta que no he añadido una constante en el vector de 1's, como sklearn incluirá automáticamente este.

3voto

user199576 Puntos 49

En caso de que usted está utilizando una regresión multivariante y no sólo una de regresión univariante, no te olvides de la cruz términos. Por ejemplo, si tienes dos variablesx1x2, y desea que los polinomios de hasta una potencia de 2, debe utilizar y=a1x1+a2x2+a3x21+a4x22+a5x1x2 donde el último término de (a5x1x2) es la que estoy hablando.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X