2015-12-27 27 views
5

Ho il seguente panda dataframe, chiamato main_frame:Python/scikit-learn/- da panda Dataframes a Scikit previsione

  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 

Sto avendo difficoltà ad esplorare il set di dati su scikit-learn e io Non sono sicuro che il problema sia il Dataset panda, le date come indice, i NaN/Infs/Zeros (che non so come risolvere), tutto, qualcos'altro che non ero in grado di tracciare.

Voglio creare una regressione semplice per prevedere il prossimo elemento target_var in base alle variabili denominate "Input" (1,2,3 ..).

Nota che ci sono molti zeri e NaN nelle serie temporali e alla fine potremmo trovare anche gli Inf.

risposta

5

Si dovrebbe prima provare a rimuovere qualsiasi riga con valori Inf, -Inf o NaN (altri metodi includono la compilazione dei NaN con, ad esempio, il valore medio della funzione).

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

Ora, crea una matrice numpy delle tue funzioni e un vettore dei tuoi obiettivi. Dato che la variabile di destinazione è nella prima colonna, è possibile utilizzare l'indicizzazione basato intero come segue:

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

Quindi creare e adattare il proprio modello:

from sklearn.linear_model import LinearRegression 

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

Ora è possibile osservare le stime:

>>> model.intercept_ 
12.109583092421092 

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

Nell'esempio precedente X = main_frame.input1 [:, 1:]. Valori y = main_frame.target_var [:, 0] .valori, giusto? – abutremutante

+0

'df' è solo un termine generico per dataframe. Puoi sostituirlo con 'main_frame' nel tuo caso. Usa 'iloc' (posizione dell'indice) invece di' input1' e 'target_var'. – Alexander

+0

ti dispiacerebbe aggiungere alla tua risposta un modo per tracciarlo insieme a X e y? – abutremutante