जब एक 1d सरणी की उम्मीद की गई थी तो एक कॉलम-वेक्टर वाई पारित किया गया था


118

मैं फिट करने के लिए की जरूरत RandomForestRegressorसे sklearn.ensemble

forest = ensemble.RandomForestRegressor(**RF_tuned_parameters)
model = forest.fit(train_fold, train_y)
yhat = model.predict(test_fold)

इस कोड ने हमेशा तब तक काम किया जब तक कि मैंने डेटा के कुछ प्रीप्रोसेसिंग ( train_y) नहीं कर दिया। त्रुटि संदेश कहता है:

DataConversionWarning: एक कॉलम-वेक्टर y तब पारित किया गया था जब 1d सरणी अपेक्षित थी। कृपया y का आकार (n_samples), उदाहरण के लिए ravel () का उपयोग करके बदलें।

मॉडल = forest.fit (train_fold, train_y)

पहले train_yएक सीरीज़ थी, अब यह सुपीरियर एरे है (यह एक कॉलम-वेक्टर है)। यदि मैं आवेदन करता हूं train_y.ravel(), तो यह एक पंक्ति वेक्टर बन जाती है और कोई त्रुटि संदेश प्रकट नहीं होता है, भविष्यवाणी कदम के माध्यम से बहुत लंबा समय लगता है (वास्तव में यह कभी भी समाप्त नहीं होता है ...)।

डॉक्स में RandomForestRegressorमैंने पाया कि इस मुद्दे को हल करने के लिए किसी भी विचार के train_yरूप में परिभाषित किया जाना चाहिए y : array-like, shape = [n_samples] or [n_samples, n_outputs]?


क्या है train_fold.shapeऔर train_y.shape?
अलेक्जेंडर

@Alexander: train_fold: tuple (749904,24) ... ट्रेन: y.ravel (): tuple (749904,)
Klausos Klausos

ठीक लग रहा है। क्या आपने यह सुनिश्चित करने के लिए डेटा की 100 पंक्तियों को ठीक से काम करने का प्रशिक्षण दिया है (क्योंकि आपने कहा था कि यह कभी समाप्त नहीं हुआ है)? इसके अलावा, क्या आपने train_yयह सुनिश्चित करने के लिए अपने डेटा की सामग्री की जांच की है कि प्रीप्रोसेसिंग ने इसे भ्रष्ट नहीं किया है?
अलेक्जेंडर

RF_tuned_parametersकृपया हमारे लिए प्रिंट करें ।
इमानोल लुएंगो

@imaluengo: {'n_estimators': 40, 'max_features': 0.8, 'n_jobs': 2, 'क्रिया': True, 'min_samples_split': 6, 'random_state': 123}
Klausos Klausos

जवाबों:


191

इस पंक्ति को बदलें:

model = forest.fit(train_fold, train_y)

सेवा:

model = forest.fit(train_fold, train_y.values.ravel())

संपादित करें:

.valuesएक सरणी में मान देगा। (आकार: (एन, 1)

.ravel उस सरणी आकार को (n) में बदल देगा


33
कोई यह समझा सकता है कि यह वास्तव में क्या बदलता है।
राहुल बाली

2
गुण: 'numpy.ndarray' ऑब्जेक्ट का कोई गुण 'मान' नहीं है
जॉन ktejik

12
यदि आपके पास एक numpy.ndarray है, तो इसके बजाय train_y.ravel () का उपयोग करें।
चैरिटी लेसचिंस्की

13
@RahulParashar क्या ravel()आपके पास: करता है y.shape == (10, 1)का उपयोग कर, y.ravel().shape == (10, )। शब्दों में ... यह एक सरणी को समतल करता है।
पास्कलवीकूटेन

क्या यह एक उपयोगी चेतावनी भी है?
एलेक्स

18

मुझे इस स्थिति का भी सामना करना पड़ा जब मैं केएनएन क्लासिफायर ट्रेन करने की कोशिश कर रहा था । लेकिन ऐसा लगता है कि मेरे जाने के बाद चेतावनी चली गई थी:
knn.fit(X_train,y_train)
को
knn.fit(X_train, np.ravel(y_train,order='C'))

इस लाइन का आगे मैंने इस्तेमाल किया import numpy as np


.ravel()दृष्टिकोण का उपयोग करते समय मेरा कॉलम वेक्टर एक सरणी के बजाय एक पंक्ति वेक्टर के लिए कनवर्टर था, लेकिन इस फिक्स ने मेरे लिए काम किया।
काबदुल्ला

12

मुझे भी यही समस्या थी। समस्या यह थी कि लेबल एक कॉलम प्रारूप में थे जबकि यह एक पंक्ति में इसकी उम्मीद करता था। उपयोगnp.ravel()

knn.score(training_set, np.ravel(training_labels))

आशा है कि यह इसे हल करता है।


1
तुम्हारा मतलब है np.ravel()?
प्रमेश बजराचार्य

10

नीचे दिए गए कोड का उपयोग करें:

model = forest.fit(train_fold, train_y.ravel())

यदि आप अभी भी नीचे के रूप में त्रुटि के रूप में थप्पड़ हो रहे हैं?

Unknown label type: %r" % y

इस कोड का उपयोग करें:

y = train_y.ravel()
train_y = np.array(y).astype(int)
model = forest.fit(train_fold, train_y)

3

ऐसा करने का दूसरा तरीका उपयोग करना है ravel

model = forest.fit(train_fold, train_y.values.reshape(-1,))

मैं सिर्फ यह जोड़ना चाहूंगा कि यह पंडों की श्रृंखला के लिए काम करेगा, लेकिन पंडों के डेटाफ़्रेम के लिए नहीं।
साल अल्तुरिगी

2

न्यूरैक्सल के साथ , आप इसे आसानी से हल कर सकते हैं:

p = Pipeline([
   # expected outputs shape: (n, 1)
   OutputTransformerWrapper(NumpyRavel()), 
   # expected outputs shape: (n, )
   RandomForestRegressor(**RF_tuned_parameters)
])

p, outputs = p.fit_transform(data_inputs, expected_outputs)

न्यूरार्क्स एक हाइपरपैरेट ट्यूनिंग और ऑटोएमएल के लिए एक लघुकथा जैसी रूपरेखा है, जो गहन शिक्षण परियोजनाओं में है!


1
format_train_y=[]
for n in train_y:
    format_train_y.append(n[0])

2
हालांकि यह कोड प्रश्न को हल कर सकता है, जिसमें यह भी बताया गया है कि यह समस्या कैसे और क्यों हल करती है, इससे वास्तव में आपके पोस्ट की गुणवत्ता को बेहतर बनाने में मदद मिलेगी, और शायद अधिक वोट भी मिलेंगे। याद रखें कि आप भविष्य में पाठकों के लिए सवाल का जवाब दे रहे हैं, न कि केवल उस व्यक्ति से जो अब पूछ रहा है। कृपया स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें और संकेत दें कि क्या सीमाएँ और मान्यताएँ लागू होती हैं।
धर्मन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.