2015-04-29 21 views
9

Sono nuovo di Python e sto cercando di eseguire la regressione lineare utilizzando sklearn su un dataframe panda. Questo è quello che ho fatto:Regressione lineare su Pandas DataFrame con Sci-kit Learn

data = pd.read_csv('xxxx.csv') 

Dopo che ho ottenuto un dataframe di due colonne, chiamiamoli 'c1', 'c2'. Ora voglio fare regressione lineare sul set di (c1, c2), così ho entrato

X=data['c1'].values 
Y=data['c2'].values 
linear_model.LinearRegression().fit(X,Y) 

che ha provocato il seguente errore

IndexError: tuple index out of range 

Cosa c'è che non va qui? Inoltre, mi piacerebbe sapere

  1. visualizzare il risultato
  2. fare previsioni in base al risultato?

Ho cercato e navigato un gran numero di siti ma nessuno di loro sembrava dare istruzioni ai principianti sulla sintassi corretta. Forse ciò che è ovvio per gli esperti non è così ovvio per un principiante come me.

Potete per favore aiutare? La ringrazio molto per il vostro tempo.

PS: Ho notato che un gran numero di domande per principianti è stato sottovalutato nello stackoverflow. Si prega di tenere conto del fatto che le cose che sembrano ovvie per un utente esperto possono richiedere un giorno da principiante per capire. Si prega di usare discrezione quando si preme la freccia giù per non danneggiare la vivacità di questa comunità di discussione.

+0

Potrebbe trattarsi di un problema di dati. Potrebbe essere utile fornire un campione rappresentativo del tuo csv. Separatamente, guardando http://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html, in basso creano il loro oggetto regression (regr = linear_model.LinearRegression()), quindi chiama rers.fit (X, Y). – Scott

+0

Per quanto riguarda il tuo PS: noto che molte domande dei principianti vengono eliminate perché non formattano le loro domande in base alle pratiche SO: http://stackoverflow.com/help/how-to-ask – Scott

risposta

1

davvero dovrebbe avere uno sguardo ai documenti per il metodo fit quale è possibile visualizzare here

Per informazioni su come visualizzare una regressione lineare, giocare con l'esempio here. Suppongo che tu non abbia usato molto ipython (ora chiamato jupyter), quindi dovresti sicuramente dedicare del tempo ad apprenderlo. È un ottimo strumento per esplorare i dati e l'apprendimento automatico. Puoi letteralmente copiare/incollare l'esempio dalla regressione lineare di scikit in un notebook ipython ed eseguirlo

Per il tuo problema specifico con il metodo fit, facendo riferimento ai documenti, puoi vedere che il formato dei dati che stai passando in per i tuoi valori X è sbagliato.

Per la documentazione, "X: matrice NumPy o matrice sparsa di forma [N_SAMPLES, n_features]"

è possibile correggere il codice con questo

X = [[x] for x in data['c1'].values] 
+0

Grazie, Tommy. C'è un modo in cui posso visualizzare i dettagli della regressione? – Dinosaur

+0

Molto probabilmente. Quali dettagli vorresti? – Tommy

28

Supponiamo che il CSV sembra qualcosa di simile :

c1,c2 
0.000000,0.968012 
1.000000,2.712641 
2.000000,11.958873 
3.000000,10.889784 
... 

ho generato i dati in quanto tali:

import numpy as np 
from sklearn import datasets, linear_model 
import matplotlib.pyplot as plt 

length = 10 
x = np.arange(length, dtype=float).reshape((length, 1)) 
y = x + (np.random.rand(length)*10).reshape((length, 1)) 

Questi dati vengono salvati su test.csv (solo per sapere da dove proviene, ovviamente si utilizzerà il proprio).

data = pd.read_csv('test.csv', index_col=False, header=0) 
x = data.c1.values 
y = data.c2.values 
print x # prints: [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] 

è necessario prendere uno sguardo alla forma dei dati si sta alimentando in .fit().

Qui x.shape = (10,) ma è necessario che sia (10, 1), vedere sklearn. Lo stesso vale per . Così abbiamo riplasmare ciò:

x = x.reshape(length, 1) 
y = y.reshape(length, 1) 

Ora creiamo l'oggetto di regressione e quindi chiamare fit():

regr = linear_model.LinearRegression() 
regr.fit(x, y) 

# plot it as in the example at http://scikit-learn.org/ 
plt.scatter(x, y, color='black') 
plt.plot(x, regr.predict(x), color='blue', linewidth=3) 
plt.xticks(()) 
plt.yticks(()) 
plt.show() 

See sklearn regressione lineare example. enter image description here

1

fare previsioni basate sul risultato?

Per prevedere,

lr = linear_model.LinearRegression().fit(X,Y) 
lr.predict(X) 

C'è un modo per visualizzare i dettagli della regressione?

La linearegressione ha gli attributi coef_ e intercept_.

lr.coef_ 
lr.intercept_ 

mostra la pendenza e l'intercettazione.

Problemi correlati