Regresión lineal en Pandas DataFrame usando Sci-kit Learn

Soy nuevo en Python y trato de realizar una regresión lineal usando sklearn en un dataframe de pandas. Esto es lo que hice:

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

Después de eso obtuve un DataFrame de dos columnas, llamémoslos ‘c1’, ‘c2’. Ahora quiero hacer una regresión lineal en el conjunto de (c1, c2), así que entré

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

que resultó en el siguiente error

 IndexError: tuple index out of range 

¿Qué está mal aquí? Además, me gustaría saber

  1. visualizar el resultado
  2. ¿Hacer predicciones basadas en el resultado?

Busqué y navegué en una gran cantidad de sitios, pero ninguno de ellos parecía instruir a los principiantes sobre la syntax adecuada. Quizás lo que es obvio para los expertos no sea tan obvio para un novato como yo.

¿Puedes por favor ayudar? Muchas gracias por tu tiempo.

PD: Me he dado cuenta de que un gran número de preguntas para principiantes fueron rechazadas en el flujo de astackmiento. Tenga en cuenta el hecho de que las cosas que parecen obvias para un usuario experto pueden tardar unos días para principiantes en darse cuenta. Use la discreción al presionar la flecha hacia abajo para no dañar la vibración de esta comunidad de discusión.

Asummos que su csv se ve algo como:

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

Generé los datos como tales:

 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)) 

Estos datos se guardan en test.csv (solo para que sepas de dónde provienen, obviamente usarás los tuyos).

 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.] 

.fit() observar la forma de los datos que está .fit() en .fit() .

Aquí x.shape = (10,) pero necesitamos que sea (10, 1) , vea sklearn . Lo mismo vale para y . Así que reformamos:

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

Ahora creamos el objeto de regresión y luego llamamos a 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() 

Ver ejemplo de regresión lineal sklearn. introduzca la descripción de la imagen aquí

¿Hacer predicciones basadas en el resultado?

Para predecir,

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

¿Hay alguna manera de poder ver los detalles de la regresión?

El LinearRegression tiene atributos coef_ e intercept_ .

 lr.coef_ lr.intercept_ 

Mostrar la pendiente y la intersección.

Debería echar un vistazo a los documentos para el método de fit que puede ver aquí.

Para ver cómo visualizar una regresión lineal, juega con el ejemplo aquí . Supongo que tampoco has usado ipython (ahora llamado jupyter), así que definitivamente deberías invertir algo de tiempo en aprender eso. Es una gran herramienta para explorar datos y aprendizaje automático. Literalmente, puede copiar / pegar el ejemplo de la regresión lineal de scikit en un cuaderno ipython y ejecutarlo

Para su problema específico con el método de fit , refiriéndose a los documentos, puede ver que el formato de los datos que está transmitiendo para sus valores de X es incorrecto.

Según los documentos, “X: matriz numpy o matriz dispersa de forma [n_samples, n_features]”

Puedes arreglar tu código con esto

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