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
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.
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 exemple .
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.
cliquez pour voir le résultat 1
cliquez pour voir l'ensemble de données
Blockquote
ici] 2
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv ('1.csv')
X = jeu de données [["mark1"]]
y = jeu de données [["mark2"]]
à partir de sklearn.linear_model import LinearRegression
regressor = LinearRegression ()
regressor.fit (X, y)
y_pred = regressor.predict (X)
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 ()
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]