train_test_split () त्रुटि: नमूने के असंगत संख्याओं के साथ इनपुट चर मिले


21

पायथन के लिए काफी नया लेकिन कुछ वर्गीकरण डेटा के आधार पर मेरा पहला आरएफ मॉडल तैयार करना। मैंने सभी लेबल को int64 संख्यात्मक डेटा में परिवर्तित कर दिया है और एक्स और वाई में एक संख्यात्मक सरणी के रूप में लोड किया है, लेकिन जब मैं मॉडल को प्रशिक्षित करने की कोशिश कर रहा हूं तो मैं एक त्रुटि मार रहा हूं।

यहाँ मेरे सरणियों की तरह दिखता है:

>>> X = np.array([[df.tran_cityname, df.tran_signupos, df.tran_signupchannel, df.tran_vmake, df.tran_vmodel, df.tran_vyear]])

>>> Y = np.array(df['completed_trip_status'].values.tolist())

>>> X
array([[[   1,    1,    2,    3,    1,    1,    1,    1,    1,    3,    1,
            3,    1,    1,    1,    1,    2,    1,    3,    1,    3,    3,
            2,    3,    3,    1,    1,    1,    1],
        [   0,    5,    5,    1,    1,    1,    2,    2,    0,    2,    2,
            3,    1,    2,    5,    5,    2,    1,    2,    2,    2,    2,
            2,    4,    3,    5,    1,    0,    1],
        [   2,    2,    1,    3,    3,    3,    2,    3,    3,    2,    3,
            2,    3,    2,    2,    3,    2,    2,    1,    1,    2,    1,
            2,    2,    1,    2,    3,    1,    1],
        [   0,    0,    0,   42,   17,    8,   42,    0,    0,    0,   22,
            0,   22,    0,    0,   42,    0,    0,    0,    0,   11,    0,
            0,    0,    0,    0,   28,   17,   18],
        [   0,    0,    0,   70,  291,   88,  234,    0,    0,    0,  222,
            0,  222,    0,    0,  234,    0,    0,    0,    0,   89,    0,
            0,    0,    0,    0,   40,  291,  131],
        [   0,    0,    0, 2016, 2016, 2006, 2014,    0,    0,    0, 2015,
            0, 2015,    0,    0, 2015,    0,    0,    0,    0, 2015,    0,
            0,    0,    0,    0, 2016, 2016, 2010]]])

>>> Y
array(['NO', 'NO', 'NO', 'YES', 'NO', 'NO', 'YES', 'NO', 'NO', 'NO', 'NO',
       'NO', 'YES', 'NO', 'NO', 'YES', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO',
       'NO', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO'], 
      dtype='|S3')

>>> X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3)

ट्रेसबैक (सबसे हालिया कॉल अंतिम):

  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/sklearn/cross_validation.py", line

2039, train_test_split सरणियों में = indexable (* arrays) फ़ाइल "/Library/Python/2.7/site-packages/sklearn/utils/validation.py", लाइन 206 इंडेक्सेबल चेक_कैंसेंसेन्ट_लॉग्रफ़ (* परिणाम) फ़ाइल "/ लाइब्रेरी / पायथन / में"। 2.7 / साइट-पैकेज / स्केलेन / बर्तन / वेलिडेशनहोम ", लाइन 181, check_consistent_length" नमूनों में:% r "% [int (l) लंबाई में l के लिए]]

ValueError: Found input variables with inconsistent numbers of samples: [1, 29]

भविष्य में, पोस्ट कृपया सवाल प्रोग्रामिंग करने के लिए stackoverflow । यह Q & A डेटा साइंस के बारे में है, न कि प्रोग्रामिंग के बारे में।
रिकार्डो क्रूज़

जवाबों:


15

आप उस त्रुटि में भाग रहे हैं क्योंकि आपकी Xऔर Yउसकी लंबाई समान नहीं है (जिसकी train_test_splitआवश्यकता है), अर्थात X.shape[0] != Y.shape[0]। आपके वर्तमान कोड को देखते हुए:

>>> X.shape
(1, 6, 29)
>>> Y.shape
(29,)

इस त्रुटि को ठीक करने के लिए:

  1. np.array()परिभाषित करते समय अंदर से अतिरिक्त सूची निकालें Xया बाद में अतिरिक्त कमांड को निम्न कमांड से हटा दें X = X.reshape(X.shape[1:]):। अब, का आकार Xहोगा (6, 29)।
  2. स्थानांतरित Xचलाकर X = X.transpose()में नमूने के समान संख्या प्राप्त करने के लिए Xऔर Y। अब, का आकार Xहोगा (29, 6) और का आकार Yहोगा (29,)।

1
कमाल है यह मेरे लिए काम किया! धन्यवाद Tuomastik! मैं वास्तव में मार्गदर्शन की सराहना करता हूं :)
josh_gray

2

क्या train_test_split दोनों की अपेक्षा Xऔर Yसमान लंबाई की सूची नहीं है? आपके X की लंबाई 6 है और Y की लंबाई 29 है। हो सकता है कि डेटाफ़्रेम (29x6 आयाम के साथ) पांडा करने की कोशिश करें और फिर से प्रयास करें?

आपके डेटा को देखते हुए, ऐसा लगता है कि आपके पास 6 सुविधाएँ हैं। उस स्थिति में, अपनी Xपंक्तियों को 29 पंक्तियों और 6 स्तंभों में बदलने का प्रयास करें । फिर उस डेटाफ़्रेम को पास करें train_test_split। आप अपनी सूची का उपयोग करके डेटाफ्रेम में बदल सकते हैं pd.DataFrame.from_records


मदद के लिए धन्यवाद साल! आप सही हैं, मुझे बस इसे उसी लंबाई में बदलना था। मेरा X.shape था (1, 6, 29) और Y.shape था (29,)। मुझे बस उन्हें
फेरबदल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.