2016-01-26 15 views
6

स्केलर के स्ट्रैटिफाइड केल्ड फ़ंक्शन का उपयोग करके, बहुत से इंडेक्स, क्या कोई मुझे त्रुटि को समझने में मदद कर सकता है?स्ट्रैटिफाइडफॉल्ड: इंडेक्स एरर: सरणी

मेरा अनुमान है कि लेबल के मेरे इनपुट सरणी के साथ इसका कुछ संबंध है, मुझे लगता है कि जब मैं उन्हें प्रिंट करता हूं (इस उदाहरण में पहला 16) इंडेक्सिंग 0 से 15 तक जाता है, लेकिन एक अतिरिक्त 0 ऊपर से मुद्रित होता है मैं उम्मीद नहीं कर रहा था। शायद मैं सिर्फ एक अजगर नोब हूँ, लेकिन यह अजीब लग रहा है।

कोई भी यहां गुम-अप देखता है?

प्रलेखन: http://scikit-learn.org...StratifiedKFold.html

कोड:

import nltk 
import sklearn 

print('The nltk version is {}.'.format(nltk.__version__)) 
print('The scikit-learn version is {}.'.format(sklearn.__version__)) 

print type(skew_gendata_targets.values), skew_gendata_targets.values.shape 
print skew_gendata_targets.head(16) 

skew_sfold10 = cross_validation.StratifiedKFold(skew_gendata_targets.values, n_folds=10, shuffle=True, random_state=20160121) 

परिणाम

The nltk version is 3.1. 
The scikit-learn version is 0.17. 
<type 'numpy.ndarray'> (500L, 1L) 
    0 
0 0 
1 0 
2 0 
3 0 
4 0 
5 0 
6 0 
7 0 
8 0 
9 0 
10 0 
11 0 
12 0 
13 0 
14 1 
15 0 
--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-373-653b6010b806> in <module>() 
     8 print skew_gendata_targets.head(16) 
     9 
---> 10 skew_sfold10 = cross_validation.StratifiedKFold(skew_gendata_targets.values, n_folds=10, shuffle=True, random_state=20160121) 
    11 
    12 #print '\nSkewed Generated Dataset (', len(skew_gendata_data), ')' 

d:\Program Files\Anaconda2\lib\site-packages\sklearn\cross_validation.pyc in __init__(self, y, n_folds, shuffle, random_state) 
    531   for test_fold_idx, per_label_splits in enumerate(zip(*per_label_cvs)): 
    532    for label, (_, test_split) in zip(unique_labels, per_label_splits): 
--> 533     label_test_folds = test_folds[y == label] 
    534     # the test split can be too big because we used 
    535     # KFold(max(c, self.n_folds), self.n_folds) instead of 

IndexError: too many indices for array 

उत्तर

11

चेक skew_gendata_targets.values के आकार। आप देखेंगे कि यह 1 डी सरणी (आकार (500,) नहीं है) स्ट्रैटिफाइडफॉल्ड अपेक्षा करता है, बल्कि एक (500,1) सरणी। SKlearn उन्हें अलग करने के बजाय उन्हें अलग करने के बजाय अलग करता है। मुझे बताएं कि क्या

+0

प्रिंटआउट आउटपुट में आउटपुट में है: प्रिंट प्रकार (skew_gendata_targets.values), skew_gendata_targets.values.shape, यह एक (500,1) numpy array है। मैं एक मैटलैब जुंकी पाइथन के गड्ढे में फेंक रहा हूं और 500x1 और 500xnada मैट्रिक्स/सरणी/चीज़ी के बीच का अंतर नहीं जानता। कम से कम एक matlab दुनिया में कोई फर्क नहीं पड़ता है। –

+2

हाँ - यह दुर्भाग्यपूर्ण और कुछ हद तक भ्रमित है। '*' जैसे ऑपरेशन करते समय अंतर महत्वपूर्ण है। एक मामले में, पांडस/numpy तत्व-वार गुणा करेगा, जबकि यह दूसरे पर एक मैट्रिक्स गुणा करेगा। आशा है कि StratifiedKFold ऑपरेशन इसे एक (500,) सरणी के साथ coercing के बाद काम किया। – Brian

+1

मैं देखता हूं, मैट्रिक्स को दोबारा बदलना एक matlaber समझ सकता है, ऐसा लगता है कि यह तय किया गया है: np.reshape (skew_gendata_targets.values, [500,]), धन्यवाद !! –

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