2015-12-27 9 views
5

ich folgendes Pandas Datenrahmen haben, main_frame genannt:Python/Scikit-Learn/Regressionen - von Pandas Dataframes Vorhersage Scikit

  target_var input1 input2 input3 input4 input5 input6 
Date 
2013-09-01  13.0  NaN  NaN  NaN  NaN  NaN  NaN 
2013-10-01  13.0  NaN  NaN  NaN  NaN  NaN  NaN 
2013-11-01  12.2  NaN  NaN  NaN  NaN  NaN  NaN 
2013-12-01  10.9  NaN  NaN  NaN  NaN  NaN  NaN 
2014-01-01  11.7  0  13  42  0  0  16 
2014-02-01  12.0  13  8  58  0  0  14 
2014-03-01  12.8  13  15  100  0  0  24 
2014-04-01  13.1  0  11  50  34  0  18 
2014-05-01  12.2  12  14  56  30  71  18 
2014-06-01  11.7  13  16  43  44  0  22 
2014-07-01  11.2  0  19  45  35  0  18 
2014-08-01  11.4  12  16  37  31  0  24 
2014-09-01  10.9  14  14  47  30  56  20 
2014-10-01  10.5  15  17  54  24  56  22 
2014-11-01  10.7  12  18  60  41  63  21 
2014-12-01   9.6  12  14  42  29  53  16 
2015-01-01  10.2  10  16  37  31  0  20 
2015-02-01  10.7  11  20  39  28  0  19 
2015-03-01  10.9  10  17  75  27  87  22 
2015-04-01  10.8  14  17  73  30  43  25 
2015-05-01  10.2  10  17  55  31  52  24 

Ich habe Probleme wurden mit der Datenmenge auf erkunden Scikit-Learn und ich Ich bin mir nicht sicher, ob das Problem das Pandas-Dataset ist, die Daten als Index, die NaNs/Infs/Zeros (die ich nicht zu lösen weiß), alles, etwas anderes, das ich nicht verfolgen konnte.

Ich möchte eine einfache Regression erstellen, um das nächste target_var Element basierend auf den Variablen namens "Input" (1,2,3 ..) vorherzusagen.

Beachten Sie, dass es in der Zeitreihe viele Nullen und NaNs gibt, und schließlich könnten wir auch Infs finden.

Antwort

5

Sie sollten zunächst versuchen, eine Zeile mit Inf, -Inf oder NaN-Werten zu entfernen (andere Methoden umfassen das Ausfüllen der NaNs, z. B. mit dem Mittelwert des Features).

df = df.replace(to_replace=[np.Inf, -np.Inf], value=np.NaN) 
df = df.dropna() 

Erstellen Sie jetzt eine numpy Matrix von Ihnen Funktionen und einen Vektor Ihrer Ziele. In Anbetracht, dass Ihre Zielgröße in der ersten Spalte ist, können Sie Integer-basierte Indizierung wie folgt verwenden:

X = df.iloc[:, 1:].values 
y = df.iloc[:, 0].values 

Dann erstellen und Ihr Modell passen:

from sklearn.linear_model import LinearRegression 

model = LinearRegression() 
model.fit(X=X, y=y) 

Jetzt können Sie Ihre Schätzungen beachten:

>>> model.intercept_ 
12.109583092421092 

>>> model.coef_ 
array([-0.05269033, -0.17723251, 0.03627883, 0.02219596, -0.01377465, 
     0.0111017 ]) 
+0

Im obigen Beispiel X = main_frame.input1 [:, 1:]. Values ​​und y = main_frame.target_var [:, 0] .values, oder? – abutremutante

+0

'df' ist nur ein allgemeiner Begriff für Datenrahmen. Sie können es in Ihrem Fall durch 'main_frame' ersetzen. Verwenden Sie 'iloc' (Indexstelle) anstelle von' input1' und 'target_var'. – Alexander

+0

Würde es Ihnen etwas ausmachen, Ihrer Antwort einen Weg zu geben, es zusammen mit X und y zu zeichnen? – abutremutante