2012-04-12 5 views
5

Ich habe einigen Arbeitscode, der richtig Daten aus einer CSV-Datei in eine PyBrain Dataset lädt:PyBrain: Daten mit numpy.loadtxt laden?

def old_get_dataset(): 

    reader = csv.reader(open('test.csv', 'rb')) 

    header = reader.next() 
    fields = dict(zip(header, range(len(header)))) 
    print header 

    # assume last field in csv is single target variable 
    # and all other fields are input variables 
    dataset = SupervisedDataSet(len(fields) - 1, 1) 

    for row in reader: 
     #print row[:-1] 
     #print row[-1] 
     dataset.addSample(row[:-1], row[-1]) 

    return dataset 

Jetzt statt numpy des loadtxt Funktion verwendet Ich versuche, diesen Code zu schreiben. Ich glaube, addSample kann numpige Arrays nehmen, anstatt die Daten Zeile für Zeile hinzufügen zu müssen.

Angenommen, mein geladenes numpy Array ist m x n dimensional, wie übertrage ich den ersten m x (n-1) Datensatz als ersten Parameter und die letzte Spalte als zweiten Parameter? Das ist, was ich versuche:

def get_dataset(): 

    array = numpy.loadtxt('test.csv', delimiter=',', skiprows=1) 

    # assume last field in csv is single target variable 
    # and all other fields are input variables 
    number_of_columns = array.shape[1] 
    dataset = SupervisedDataSet(number_of_columns - 1, 1) 

    #print array[0] 
    #print array[:,:-1] 
    #print array[:,-1] 
    dataset.addSample(array[:,:-1], array[:,-1]) 

    return dataset 

Aber ich bin immer folgende Fehlermeldung:

Traceback (most recent call last): 
    File "C:\test.py", line 109, in <module> 
    (d, n, t) = main() 
    File "C:\test.py", line 87, in main 
    ds = get_dataset() 
    File "C:\test.py", line 45, in get_dataset 
    dataset.addSample(array[:,:-1], array[:,-1]) 
    File "C:\Python27\lib\site-packages\pybrain\datasets\supervised.py", 
     line 45, in addSample self.appendLinked(inp, target) 
    File "C:\Python27\lib\site-packages\pybrain\datasets\dataset.py", 
     line 215, in appendLinked self._appendUnlinked(l, args[i]) 
    File "C:\Python27\lib\site-packages\pybrain\datasets\dataset.py", 
     line 197, in _appendUnlinked self.data[label][self.endmarker[label], :] = row 
ValueError: output operand requires a reduction, but reduction is not enabled 

Wie kann ich dieses Problem beheben?

+0

ich das Problem denken tun könnte addSample bezogen werden() für beide Parameter ein 2-dimensionales Array erwartet, aber in einem 1- Ich bin vorbei dimensionales Array. Ich bin ein wenig verwirrt darüber, wie man das Zielfeld zweidimensional macht, da es nur eine einzige Zielvariable pro Trainingsbeispiel gibt. – User

Antwort

8

Nach viel experimentieren und Re-Lektüre des dataset documentation die folgenden Läufe ohne Fehler:

def get_dataset(): 

    array = numpy.loadtxt('test.csv', delimiter=',', skiprows=1) 

    # assume last field in csv is single target variable 
    # and all other fields are input variables 
    number_of_columns = array.shape[1] 
    dataset = SupervisedDataSet(number_of_columns - 1, 1) 

    print array[0] 
    #print array[:,:-1] 
    #print array[:,-1] 
    #dataset.addSample(array[:,:-1], array[:,-1]) 
    #dataset.addSample(array[:,:-1], array[:,-2:-1]) 
    dataset.setField('input', array[:,:-1]) 
    dataset.setField('target', array[:,-1:]) 

    return dataset 

ich überprüfen, zu verdoppeln, haben, dass sie das Richtige tut.

0

Ich habe eine kleine Funktion geschrieben dieses

def load_csv(filename, cols, sep = ',', skip = 0): 
    from numpy import loadtxt 
    data = loadtxt(filename, delimiter = sep, usecols = cols, skiprows = skip) 
    return data