2014-04-29 6 views
8

में त्रुटि मैं ट्रेन और परीक्षण सेट पर यादृच्छिक वन वर्गीकरण करने के लिए निम्न कोड पर काम कर रहा हूं;"बदले में 1 कॉलम ..." numpy

from sklearn.ensemble import RandomForestClassifier 
from numpy import genfromtxt, savetxt 

def main(): 
    dataset = genfromtxt(open('filepath','r'), delimiter=' ', dtype='f8') 
    target = [x[0] for x in dataset] 
    train = [x[1:] for x in dataset] 
    test = genfromtxt(open('filepath','r'), delimiter=' ', dtype='f8') 

    rf = RandomForestClassifier(n_estimators=100) 
    rf.fit(train, target) 
    predicted_probs = [[index + 1, x[1]] for index, x in enumerate(rf.predict_proba(test))] 

    savetxt('filepath', predicted_probs, delimiter=',', fmt='%d,%f', 
      header='Id,PredictedProbability', comments = '') 

if __name__=="__main__": 
    main() 

हालांकि मुझे निष्पादन पर निम्न त्रुटि मिलती है;

---->  dataset = genfromtxt(open('C:/Users/Saurabh/Desktop/pgm/Cora/a_train.csv','r'), delimiter='', dtype='f8') 

ValueError: Some errors were detected ! 
    Line #88 (got 1435 columns instead of 1434) 
    Line #93 (got 1435 columns instead of 1434) 
    Line #164 (got 1435 columns instead of 1434) 
    Line #169 (got 1435 columns instead of 1434) 
    Line #524 (got 1435 columns instead of 1434) 
... 
... 
... 

कोई सुझाव है कि इससे कैसे बचें ?? धन्यवाद।

उत्तर

2

आपके पास अपनी पंक्तियों में से एक में बहुत से कॉलम हैं। उदाहरण के लिए

>>> import numpy as np 
>>> from StringIO import StringIO 
>>> s = """ 
... 1 2 3 4 
... 1 2 3 4 5 
... """ 
>>> np.genfromtxt(StringIO(s),delimiter=" ") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib64/python2.6/site-packages/numpy/lib/npyio.py", line 1654, in genfromtxt 
    raise ValueError(errmsg) 
ValueError: Some errors were detected ! 
    Line #2 (got 5 columns instead of 4) 
+0

क्या हम इसे प्राप्त कर सकते हैं यदि कॉलम की संख्या बराबर नहीं है? –

7

genfromtxt इस त्रुटि दे देंगे अगर स्तंभों की संख्या असमान है।

मैं इसे चारों ओर 3 तरीके के बारे में सोच सकते हैं:

1. usecols पैरामीटर

np.genfromtxt('yourfile.txt',delimiter=',',usecols=np.arange(0,1434)) 

हालांकि - यह मतलब हो सकता है कि आप कुछ डेटा (जहां पंक्तियों से अधिक समय 1434 स्तंभ हैं खोना) - चाहे वह मायने रखता है या नहीं।

2. अपनी इनपुट डेटा फ़ाइल समायोजित करें ताकि इसमें बराबर संख्या में कॉलम हों। genfromtxt:

से कुछ

3. उपयोग अन्य ............. like this

1

मैं इस त्रुटि थी। कारण मेरे डेटा में एक प्रविष्टि थी जिसमें एक स्थान था। इससे इसे एक अतिरिक्त पंक्ति के रूप में देखा गया। सुनिश्चित करें कि सभी अंतर पूरे डेटा में सुसंगत है।

1

ऐसा लगता है कि कॉलम नामों में डेटा की तुलना में 1 और कॉलम है (डेटा पर हेडर बनाम 1434 पर 1435 कॉलम)।

आप कर सकते थे या तो:

1) को हटा दें हैडर कि डेटा

या

2) genfromtxt से छोड़ हैडर का उपयोग करें के साथ मतलब नहीं है से 1 स्तंभ (उदाहरण के लिए ) , np.genfromtxt('myfile', skip_header=*how many lines to skip*, delimiter=' ') documentation में अधिक जानकारी मिली।

0

मुझे यह त्रुटि भी मिली जब मैं genfromtext के साथ एक टेक्स्ट डेटासेट लोड करने का प्रयास कर रहा था और केरास के साथ टेक्स्ट वर्गीकरण कर रहा था।

डेटा प्रारूप था: [some_text]\t[class_label]। मेरी समझ यह थी कि पहले कॉलम में कुछ वर्ण हैं जो किसी भी तरह पार्सर को भ्रमित करते हैं और दो कॉलम ठीक से विभाजित नहीं किए जा सकते हैं।

data = np.genfromtxt(my_file.csv, delimiter='\t', usecols=(0,1), dtype=str); 

इस स्निपेट तुम्हारा साथ एक ही ValueError बनाया है और मेरी पहली वैकल्पिक हल के लिए एक स्तंभ के रूप में सब कुछ पढ़ने के लिए किया गया था:

data = np.genfromtxt(my_file, delimiter='\t', usecols=(0), dtype=str); 

और बाद में अपने आप से डेटा अलग हो गए।

हालांकि, आखिरकार जेनफ्रॉक्स्ट में टिप्पणी पैरामीटर को स्पष्ट रूप से परिभाषित करने के लिए क्या सही ढंग से काम किया गया था।

data = np.genfromtxt(my_file, delimiter='\t', usecols=(0,1), dtype=str, comments=None); 

प्रलेखन के अनुसार:

वैकल्पिक तर्क टिप्पणी एक चरित्र स्ट्रिंग एक टिप्पणी की शुरुआत के निशान है कि परिभाषित करने के लिए प्रयोग किया जाता है। डिफ़ॉल्ट रूप से, genfromtxt टिप्पणियां = '#' मानता है। टिप्पणी मार्कर लाइन पर कहीं भी हो सकता है। कोई भी टिप्पणी मार्कर के बाद मौजूद चरित्र को को अनदेखा किया जाता है।

डिफ़ॉल्ट वर्ण जो एक टिप्पणी इंगित करता है '#' है, और इस प्रकार यदि यह वर्ण आपके टेक्स्ट कॉलम में शामिल है, तो इसके बाद सबकुछ अनदेखा कर दिया जाता है। यही कारण है कि दो कॉलम genfromtext द्वारा पहचाना नहीं जा सकता है।

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