2017-09-26 1 views
0

Ich bin ein Dataset zur Verfügung gestellt und ich versuche, eine Beziehung zwischen einigen X-und Y-Daten zu finden. Ich möchte in der Lage sein, die sklearn-Bibliothek zu verwenden, um die Daten zu plotten und die Kurve des eqn vorherzusagen.Verwenden Sie Sklearn to und Polynomregression, um die Gleichung einer Kurve anzupassen/vorherzusagen. Endlosschleife Fehler

Allerdings steckt mein Code in einer Endlosschleife, wenn ich versuche, meine vorhergesagten Werte nach der Anpassung des Polynomregressionsmodells an meinen Datensatz zu plotten.

Das Endziel wäre einmal, wenn ich die Kurve vorhergesagt/geplottet habe Ich möchte gerne wissen, was die volle Gleichung der Kurve ist.

Hier ist mein 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() 

Antwort

-1

Es ist keine Endlosschleife, es dauert nur eine Weile. Als ich polyREG.fit_transform (xgrid) ausgeführt habe, dauerte es ungefähr eine Minute. Aber dann, als ich LinReg2.predict (polyREG.fit_transform (xgrid)) lief, bekam ich: "shapes (1,5563251) und (1820,12) nicht ausgerichtet: 5563251 (dim 1)! = 1820 (dim 0)".

bearbeiten nach einem Blick durch den Code einige mehr:

Vermutlich Sie versuchen, auf 12 Beobachtungen von einer Basisvariablen zu trainieren, und Sie wollen ein Polynom vierter Ordnung auf diese Variable passen, so dass Sie 12 Beobachtungen von 5 abgeleiteten Variablen (x^0, x^1, x^2, x^3, x^4), für insgesamt 60 x-Werte (12 Zeilen mit 5 Werten). Sie möchten dann auf 106 neue Basiswerte von x vorhersagen, was Ihnen insgesamt 530 x-Werte ergibt (106 Zeilen mit 5 Werten). PolynomialFeatures denkt jedoch, dass Sie 1 Beobachtung von 106 Variablen statt 106 Beobachtungen von 1 Variable haben. Aufgrund der Kreuzterme ist die Anzahl der abgeleiteten Variablen polynomial in der Anzahl der Basisvariablen. Anstatt 106 Zeilen mit 5 Werten zu haben, gibt es eine Zeile mit 5563251 Werten, was nicht nur bedeutet, dass die Auswertung etwas dauert, sondern auch dass die lineare Anpassung fehlschlägt, da die Anzahl der Werte in der Trainingssatzzeilen sind nicht identisch mit der Anzahl der Werte in den Vorhersagesatzzeilen.

tl; dr Ändern Sie (1, -1) in (-1, 1) in Ihren Umformungsbefehlen.

+0

Wie kann ich es korrigieren, damit ich die vorhergesagte Kurve darstellen kann? – NoviceCoder

Verwandte Themen