web-dev-qa-db-fra.com

Régression linéaire sur Pandas DataFrame utilisant Sci-kit Learn

Je suis nouveau sur Python et j'essaie d'effectuer une régression linéaire en utilisant sklearn sur un pandas dataframe. C'est ce que j'ai fait:

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

Après cela, j'ai obtenu un DataFrame de deux colonnes, appelons-les "c1", "c2". Maintenant, je veux faire une régression linéaire sur l'ensemble de (c1, c2) donc je suis entré

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

ce qui a entraîné l'erreur suivante

IndexError: Tuple index out of range

Qu'est-ce qui ne va pas ici? J'aimerais aussi savoir

  1. visualiser le résultat
  2. faire des prédictions en fonction du résultat?

J'ai cherché et parcouru un grand nombre de sites, mais aucun d'entre eux ne semblait instruire les débutants sur la syntaxe appropriée. Ce qui est évident pour les experts n'est peut-être pas aussi évident pour un novice comme moi.

Peux-tu aider s'il te plait? Merci beaucoup pour votre temps.

PS: J'ai remarqué qu'un grand nombre de questions pour les débutants ont été rejetées dans stackoverflow. Veuillez prendre en compte le fait que les choses qui semblent évidentes pour un utilisateur expert peuvent prendre quelques jours pour comprendre. Veuillez faire preuve de discrétion lorsque vous appuyez sur la flèche vers le bas de peur de nuire au dynamisme de cette communauté de discussion.

19
Dinosaur

Supposons que votre csv ressemble à quelque chose comme:

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

J'ai généré les données en tant que telles:

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

Ces données sont enregistrées dans test.csv (juste pour que vous sachiez d'où elles viennent, vous utiliserez évidemment les vôtres).

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

Vous devez examiner la forme des données que vous introduisez dans .fit().

Ici x.shape = (10,) mais nous avons besoin que ce soit (10, 1), Voir sklearn . Il en va de même pour y. Nous remodelons donc:

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

Maintenant, nous créons l'objet de régression, puis appelons 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()

Voir régression linéaire sklearn exempleenter image description here

37
Scott

faire des prédictions en fonction du résultat?

Prédire,

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

Existe-t-il un moyen de visualiser les détails de la régression?

La LinearRegression a coef_ et intercept_ les attributs.

lr.coef_
lr.intercept_

montrer la pente et l'interception.

1
serv-inc

cliquez pour voir le résultat 1

assumer votre jeu de données

cliquez pour voir l'ensemble de données

Blockquote

ici] 2

Importer les bibliothèques

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

Importation de l'ensemble de données

dataset = pd.read_csv ('1.csv')

X = jeu de données [["mark1"]]

y = jeu de données [["mark2"]]

Ajustement de la régression linéaire simple à l'ensemble

à partir de sklearn.linear_model import LinearRegression

regressor = LinearRegression ()

regressor.fit (X, y)

Prédire les résultats définis

y_pred = regressor.predict (X)

Visualisation des résultats définis

plt.scatter (X, y, color = 'red')

plt.plot (X, regressor.predict (X), color = 'blue')

plt.title ('mark1 vs mark2')

plt.xlabel ('mark1')

plt.ylabel ('mark2')

plt.show ()

0
Samrat Kishore

Vous devriez vraiment jeter un œil aux documents de la méthode fit que vous pouvez voir ici

Pour savoir comment visualiser une régression linéaire, jouez avec l'exemple ici . Je suppose que vous n'avez pas beaucoup utilisé ipython (maintenant appelé jupyter), vous devriez donc certainement consacrer du temps à apprendre cela. C'est un excellent outil pour explorer les données et l'apprentissage automatique. Vous pouvez littéralement copier/coller l'exemple de la régression linéaire scikit dans un bloc-notes ipython et l'exécuter

Pour votre problème spécifique avec la méthode fit, en vous référant aux documents, vous pouvez voir que le format des données que vous transmettez pour vos valeurs X est incorrect.

Selon les documents, "X: tableau numpy ou matrice clairsemée de forme [n_samples, n_features]"

Vous pouvez corriger votre code avec ceci

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