2014-11-24 10 views
9

मेरे पास ".dat" फ़ाइल है जिसमें एक्स और वाई के सहेजे गए मान हैं (इसलिए एक टुपल (एन, 2) जहां एन पंक्तियों की संख्या है) ।स्केलेर्न लीनियर रिग्रेशन - "इंडेक्स एरर: ट्यूपल इंडेक्स रेंज से बाहर"

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

मैं linear_model.LinearRegression() के लिए एक उदाहरण बनाया, लेकिन जब मैं .fit(x,y) विधि आह्वान मैं

IndexError: tuple index out of range

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

मिल क्या मैं गलत क्या किया?

+0

खेद है कि मैं पूरी तरह से अपने प्रश्न पढ़ने में भूलना :(मैं जवाब हटा दिया हो, अगर मैं एक मिल सकता है ठीक करें तो मैं संपादित उत्तर को अनदेखा कर दूंगा। लेकिन क्या आप अधिक जानकारी प्रदान कर सकते हैं? जैसे आपका पूरा कोड? – Ffisegydd

+0

यह वह कोड है जिसकी आपको आवश्यकता है, और कुछ भी महत्वपूर्ण नहीं है। – JackLametta

+0

वास्तव में? 'linear_model' क्या है? आपने कैसे किया इसे प्राप्त करें? – Ffisegydd

उत्तर

16

रैखिक प्रतिगमन दो आयामों के साथ एक सरणी के रूप में X उम्मीद और आंतरिक रूप से X.shape[1] की आवश्यकता है एक np.ones सरणी प्रारंभ करने में। तो X को nx1 सरणी में कनवर्ट करना होगा। तो, बदल देते हैं:

regr.fit(x,y) 

द्वारा:

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

यह समस्या ठीक कर देंगे। डेमो:

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

प्लॉट करने के लिए प्रतिगमन रेखा से नीचे कोड का उपयोग करें:

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

मदद के लिए बहुत बहुत धन्यवाद! एक और सवाल: क्या यह सामान्य है कि अब मुझे रैखिक प्रतिगमन से केवल एक गुणांक मिलता है? मैं अपनी लाइन कैसे प्लॉट कर सकता हूं? – JackLametta

+0

@ जैकलैमेटा, यह बिल्कुल सामान्य है। इन गुणांक का उपयोग एक्स मान दिए गए वाई मान की भविष्यवाणी करने के लिए किया जाता है। मैंने प्लॉट लाइन पर कोड अपलोड कर लिया है। –

संबंधित मुद्दे