web-dev-qa-db-fra.com

régression polynomiale à l'aide de python

D'après ce que je comprends, la régression polynomiale est un type spécifique d'analyse de régression, qui est plus compliqué que la régression linéaire. Existe-t-il un module python capable de le faire? J'ai examiné matplotlib, scikitand numpy mais je ne trouve que l'analyse de régression linéaire.

Et est-il possible de calculer le coefficient de corrélation d’une ligne non linéaire?

6
astrochris

scikit prend en charge la régression linéaire et polynomiale.

Vérifiez les Modèles linéaires généralisés page à la section Régression polynomiale: extension des modèles linéaires avec des fonctions de base .

Exemple:

>>> from sklearn.preprocessing import PolynomialFeatures
>>> import numpy as np
>>> X = np.arange(6).reshape(3, 2)
>>> X
array([[0, 1],
       [2, 3],
       [4, 5]])
>>> poly = PolynomialFeatures(degree=2)
>>> poly.fit_transform(X)
array([[ 1,  0,  1,  0,  0,  1],
       [ 1,  2,  3,  4,  6,  9],
       [ 1,  4,  5, 16, 20, 25]])

Les fonctionnalités de X ont été transformées de [x_1, x_2] à [1, x_1, x_2, x_1^2, x_1 x_2, x_2^2] et peuvent désormais être utilisées dans n’importe quel modèle linéaire.

Ce type de prétraitement peut être simplifié avec les outils Pipeline. Un objet unique représentant une régression polynomiale simple peut être créé et utilisé comme suit:

>>> from sklearn.preprocessing import PolynomialFeatures
>>> from sklearn.linear_model import LinearRegression
>>> from sklearn.pipeline import Pipeline
>>> model = Pipeline([('poly', PolynomialFeatures(degree=3)),
...                   ('linear', LinearRegression(fit_intercept=False))])
>>> # fit to an order-3 polynomial data
>>> x = np.arange(5)
>>> y = 3 - 2 * x + x ** 2 - x ** 3
>>> model = model.fit(x[:, np.newaxis], y)
>>> model.named_steps['linear'].coef_
array([ 3., -2.,  1., -1.])

Le modèle linéaire formé sur les entités polynomiales est capable de récupérer exactement les coefficients polynomiaux en entrée.

Dans certains cas, il n’est pas nécessaire d’inclure des puissances supérieures d’une caractéristique unique, mais uniquement les fonctions dites d’interaction qui se multiplient au maximum d caractéristiques distinctes. Ceux-ci peuvent être obtenus à partir de PolynomialFeatures avec le paramètre interaction_only=True.

10
fferri

Avez-vous jeté un œil à polyfit de NumPy? Voir référence .

De leurs exemples:

>>> import numpy as np
>>> x = np.array([0.0, 1.0, 2.0, 3.0,  4.0,  5.0])
>>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
>>> z = np.polyfit(x, y, 3)
>>> z
[ 0.08703704 -0.81349206  1.69312169 -0.03968254]
7
adrianus

Vous pouvez d'abord créer vos entités polynomiales à l'aide de PolynomialFeatures de sklearn, puis utiliser votre modèle linéaire.

La fonction ci-dessous peut être utilisée pour prédire un modèle formé.

from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(degree=2)

lm_polyfeats = linear_model.LinearRegression()
lm_polyfeats.fit(poly.fit_transform(array2D),targetArray)

def LM_polynomialFeatures_2Darray(lm_polyfeats,array2D):
    array2D=poly.fit_transform(array2D)
    return(lm.predict(array2D))

p=LM_polynomialFeatures_2Darray(lm_polyfeats,array2D)
0
Ioannis Nasios