2014-11-24 6 views
9

X ve Y'nin kaydedilmiş değerleri olan bir ".dat" dosyası var (böylece bir satır (n, 2) burada n satır sayısıdır) . Sklearn Doğrusal Regresyon - "IndexError: aralık dışı dizilim"

import numpy as np 
import matplotlib.pyplot as plt 
import scipy.interpolate as interp 
from sklearn import linear_model 

in_file = open(path,"r") 
text = np.loadtxt(in_file) 
in_file.close() 
x = np.array(text[:,0]) 
y = np.array(text[:,1]) 

Ben linear_model.LinearRegression() için bir örneğini oluşturdu ama .fit(x,y) yöntemini çağırdığınızda, ben yanlış ne yaptım

IndexError: tuple index out of range

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

olsun?

+0

Üzgünüm tamamen Soru oynanırsa :(Şey alabilir miyim, cevap Sildikleriniz düzeltin, sonra düzenlenmiş cevabı sileceğim.Ama daha fazla bilgi verebilir misiniz? Tam kodunuz gibi? – Ffisegydd

+0

Bu, ihtiyacınız olan kod, başka hiçbir şey önemli değildir. – JackLametta

+0

Gerçekten? 'linear_model' nedir? Anladın mı? – Ffisegydd

cevap

16

Doğrusal Regresyon iki boyutlu bir dizi olarak X bekler ve dahili olarak bir np.ones diziyi başlatmak için X.shape[1] gerektirir. Yani X'u nx1 dizisine dönüştürmek hile yapar. Yani, değiştirin:

regr.fit(x,y) 

tarafından:

regr.fit(x[:,np.newaxis],y) 

Bu sorunu çözecektir. Demo:

>>> from sklearn import datasets 
>>> from sklearn import linear_model 
>>> clf = linear_model.LinearRegression() 
>>> iris=datasets.load_iris() 
>>> X=iris.data[:,3] 
>>> Y=iris.target 
>>> clf.fit(X,Y) # This will throw an error 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/dist-packages/sklearn/linear_model/base.py", line 363, in fit 
    X, y, self.fit_intercept, self.normalize, self.copy_X) 
    File "/usr/lib/python2.7/dist-packages/sklearn/linear_model/base.py", line 103, in center_data 
    X_std = np.ones(X.shape[1]) 
IndexError: tuple index out of range 
>>> clf.fit(X[:,np.newaxis],Y) # This will work properly 
LinearRegression(copy_X=True, fit_intercept=True, normalize=False) 

regresyon çizgisi aşağıdaki kodu kullanabilirsiniz çizdirmek için:

>>> from matplotlib import pyplot as plt 
>>> plt.scatter(X, Y, color='red') 
<matplotlib.collections.PathCollection object at 0x7f76640e97d0> 
>>> plt.plot(X, clf.predict(X[:,np.newaxis]), color='blue') 
<matplotlib.lines.Line2D object at 0x7f7663f9eb90> 
>>> plt.show() 

enter image description here

+0

Yardım için çok teşekkür ederim! Başka bir soru: Şimdi lineer regresyondan sadece bir katsayı almam normal mi? Çizgisini nasıl çizebilirim? – JackLametta

+0

@JackLametta, Bu kesinlikle normal. Bu katsayılar Y değeri verilen X değerini tahmin etmek için kullanılır. Kodu arsa çizgisine yükledim. –