स्केलेरन: लीनियररेजेशन.फिट () कहते समय नमूनों की असंगत संख्या के साथ सरणियाँ मिलीं।


102

बस एक सरल रैखिक प्रतिगमन करने की कोशिश कर रहा हूँ, लेकिन मैं इस त्रुटि से चकित हूँ:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].values, df2.iloc[1:1000, 2].values)

जो पैदा करता है:

ValueError: Found arrays with inconsistent numbers of samples: [  1 999]

इन चयनों में समान आयाम होने चाहिए, और उन्हें सुन्न सरणियाँ होनी चाहिए, इसलिए मैं क्या याद कर रहा हूं?

जवाबों:


116

ऐसा लगता है कि स्केलेर के लिए (पंक्ति संख्या, स्तंभ संख्या) डेटा आकार की आवश्यकता होती है। यदि आपका डेटा आकार (पंक्ति संख्या) पसंद है (999, ), तो यह काम नहीं करता है। उपयोग करके numpy.reshape(), आपको सरणी का आकार बदलना चाहिए (999, 1), उदाहरण के लिए

data=data.reshape((999,1))

मेरे मामले में, इसने उसी के साथ काम किया।


6
मेरा डेटा आकार (10L) है, मैं इसे (10L, 1) में कैसे परिवर्तित करूं। जब मैं डेटा = data.reshape (लेन (डेटा), 1) का उपयोग करता हूं, तो परिणामी आकृति होती है (10L, 1L) नहीं (10L, 1)
user3841581

@ user3841581 कृपया इस पोस्ट को देखें ।
जॉर्ज लियू

1
@ टिप्पणी के लिए धन्यवाद। मैंने यह भी पता लगाया कि X_train आकार (N, 1) का होना चाहिए, लेकिन y_train आकार (N,) नहीं (N, 1) का होना चाहिए, अन्यथा यह काम नहीं करता है, कम से कम मेरे लिए नहीं।
CrossEntropy

data.reshape (...) डेटा ऑब्जेक्ट श्रृंखला वस्तु है, तो चेतावनी चेतावनी दिखा सकते हैं। Data.values.reshape (...) का उपयोग करें
नाइटफ़्री

data = data.reshape (-1,1)
इताची

24

लगता है कि आप पांडा डेटाफ्रेम (नाम df2 से) का उपयोग कर रहे हैं।

आप निम्न कार्य भी कर सकते हैं:

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, 5].to_frame(), df2.iloc[1:1000, 2].to_frame())

नोट: मैंने "मान" हटा दिया है क्योंकि यह पांडा श्रृंखला को numpy.ndarray में बदलता है और numpy.ndarray में to_frame () का गुण नहीं है।


11

यूडनेस डीप लर्निंग फाउंडेशन कोर्स पर देखा:

df = pd.read_csv('my.csv')
...
regr = LinearRegression()
regr.fit(df[['column x']], df[['column y']])

2
धन्यवाद! यह वास्तव में सबसे सरल और समझने में आसान है!
जुआन ए। नवारो

दरअसल, वाई पैरामीटर एक (लंबाई,) आकार के रूप में अपेक्षित है। धन्यवाद!
माइकल_जैंग

5

मुझे लगता है कि regr.fit के "X" तर्क को एक मैट्रिक्स होने की आवश्यकता है, इसलिए निम्नलिखित को काम करना चाहिए।

regr = LinearRegression()
regr.fit(df2.iloc[1:1000, [5]].values, df2.iloc[1:1000, 2].values)

4

मुझे इस त्रुटि का सामना करना पड़ा क्योंकि मैंने अपना डेटा a में बदल दिया np.array। मैंने अपने डेटा को np.matrixइसके बजाय परिवर्तित करके और ट्रांसफ़ॉर्म लेकर समस्या को ठीक किया ।

ValueError: regr.fit(np.array(x_list), np.array(y_list))

सही बात: regr.fit(np.transpose(np.matrix(x_list)), np.transpose(np.matrix(y_list)))


2
expects X(feature matrix)

अपनी सुविधाओं को इस तरह से करने की कोशिश करें:

विशेषताएं = ['टीवी', 'रेडियो', 'समाचार पत्र']
एक्स = डेटा [विशेषताएं]

1

मैंने इसी तरह की समस्या का सामना किया। मेरे मामले में समस्या यह थी कि, X में पंक्तियों की संख्या y में पंक्तियों की संख्या के बराबर नहीं थी।

फीचर कॉलम में प्रविष्टियों की संख्या टारगेट वेरिएबल में एंट्री की संख्या के बराबर नहीं थी क्योंकि मैंने कुछ स्तंभों को फाल्ट कॉलम से गिरा दिया था।


0

दो सरणियों (array1 और array2) का विश्लेषण करने के लिए उन्हें निम्नलिखित दो आवश्यकताओं को पूरा करने की आवश्यकता है:

1) वे एक numpy.ndarray होने की जरूरत है

इससे जाँच करें

type(array1)
# and
type(array2)

अगर ऐसा नहीं है तो उनमें से कम से कम एक प्रदर्शन करें

array1 = numpy.ndarray(array1)
# or
array2 = numpy.ndarray(array2)

2) आयामों को निम्नानुसार होना चाहिए:

array1.shape #shall give (N, 1)
array2.shape #shall give (N,)

N उन मदों की संख्या है जो सरणी में हैं। सही संख्या में कुल्हाड़ी प्रदर्शन के साथ array1 प्रदान करने के लिए:

array1 = array1[:, numpy.newaxis]

0

जैसा कि एक्स के ऊपर उल्लेख किया गया था कि ज्ञात आयामों के साथ एक मैट्रिक्स या एक संख्यात्मक सरणी होना चाहिए। तो आप शायद इसका उपयोग कर सकते हैं:

df2.iloc[1:1000, 5:some_last_index].values

तो आपका डेटाफ़्रेम ज्ञात आयामों के साथ एक सरणी में बदल जाएगा और आपको इसे फिर से खोलने की आवश्यकता नहीं होगी



-1

ट्रेन परीक्षण विभाजन के दौरान आपसे गलती हो सकती है

x_train,x_test,y_train,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)

उपरोक्त कोड सही है

आपने नीचे की तरह किया होगा जो गलत है

x_train,y_train,x_test,y_test=sklearn.model_selection.train_test_split(X,Y,test_size)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.