2017-09-26 6 views
0

On me fournit un ensemble de données et j'essaie de trouver une relation entre certaines données X et Y. Je veux pouvoir utiliser la bibliothèque de sklearn pour tracer les données et prédire/plt la courbe de l'eqn.Utiliser Sklearn et Régression polynomiale pour ajuster/prédire l'équation d'une courbe. Erreur de boucle infinie

Cependant, mon code est bloqué dans une boucle infinie lorsque j'essaie de tracer mes valeurs prédites après avoir ajusté le modèle de régression polynomiale à mon ensemble de données.

L'objectif final serait une fois que la courbe serait prédite/tracée. J'aimerais savoir quelle est l'équation complète de la courbe.

Voici mon code.

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 
Dataset = pd.DataFrame() 
Dataset["X"] = [6377, 6378, 6379, 6380, 6381, 6382, 6383, 6385, 6387, 6392, 6397, 6402] 
Dataset["Y"] = [1.225, 1.112, 1.007, 0.9093, 0.8194, 0.7364, 0.6601, 0.5258, 0.4135, 0.1948, 0.08891, 0.04008] 

print(Dataset) 

X = np.reshape(np.array(Dataset['X']), (1, -1)) 
Y = np.reshape(np.array(Dataset['Y']), (1, -1)) 

print(X) 
print(Y) 

from sklearn.linear_model import LinearRegression 

linReg = LinearRegression() 
linReg.fit(X, Y) 

plt.scatter(X, Y, color='red') 
# plt.plot(X,linReg.predict(X), color = 'blue') 

from sklearn.preprocessing import PolynomialFeatures 

polyREG = PolynomialFeatures(degree=4) 

xPoly = polyREG.fit_transform(X) 

LinReg2 = LinearRegression() 
LinReg2.fit(xPoly, Y) 
# 
# try: 
#  xgrid = np.arange(min(X), max(X), .1) 
# except Exception as e: 
#  print(e) 

# xgrid = range(6377, 6403, 1) 
# xgrid = np.asarray(xgrid) 
# print(xgrid.shape) 
# xgrid = np.reshape(xgrid, (1,-1)) 

xgrid = np.reshape(np.arange(6300, 6405, 1), (1,-1)) 
print(xgrid.shape) 
#X = np.reshape(np.array(Dataset['X']), (1, -1)) 
#plt.plot(xg, 1, color = "blue") 
try: 
    plt.plot(xgrid, LinReg2.predict(polyREG.fit_transform(xgrid)), color='blue') 
except Exception as e: 
    print(e) 
plt.show() 

Répondre

-1

Ce n'est pas une boucle infinie, ça prend juste un moment. Quand j'ai couru polyREG.fit_transform (xgrid), cela a pris environ une minute. Mais alors quand j'ai couru LinReg2.predict (polyREG.fit_transform (xgrid)), j'ai obtenu: "formes (1,5563251) et (1820,12) non alignées: 5563251 (dim 1)! = 1820 (dim 0)".

Modifier après avoir regardé à travers le code un peu plus:

On peut supposer que vous essayez de former sur 12 observations d'une variable de base, et que vous voulez adapter un quatrième polynôme d'ordre à cette variable, vous donnant 12 observations de 5 variables dérivées (x^0, x^1, x^2, x^3, x^4), pour un total de 60 valeurs x (12 rangées de 5 valeurs). Vous voulez ensuite prédire sur 106 nouvelles valeurs de base de x, vous donnant 530 valeurs x totales (106 lignes de 5 valeurs). Cependant, PolynomialFeatures pense que vous avez 1 observation de 106 variables, plutôt que 106 observations de 1 variable. En raison des termes croisés, le nombre de variables dérivées est polynomial dans le nombre de variables de base. Au lieu d'avoir 106 lignes de 5 valeurs, il y a 1 ligne de 5563251 valeurs, ce qui signifie non seulement que cela va prendre un certain temps, mais aussi que l'ajustement linéaire va échouer, parce que le nombre de valeurs dans le formation des lignes d'ensemble n'est pas identique au nombre de valeurs dans les lignes d'ensembles de prédictions. Tt; dr change (1, -1) en (-1, 1) dans vos commandes de remodelage.

+0

Comment puis-je corriger le problème pour pouvoir tracer la courbe prévue? – NoviceCoder