2012-04-12 15 views
5

ho qualche codice di lavoro che carica correttamente i dati da un file CSV in un set di dati PyBrain:PyBrain: caricamento dei dati con numpy.loadtxt?

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 

ora sto cercando di riscrivere il codice per utilizzare la funzione di loadtxt NumPy invece. Credo che addSample possa prendere array numpy piuttosto che dover aggiungere i dati una riga alla volta.

Supponendo che la mia matrice numpy caricata sia m x n dimensionale, come passare il primo set di dati m x (n-1) come primo parametro e l'ultima colonna di dati come secondo parametro? Questo è quello che sto cercando:

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 

Ma sto ottenendo il seguente errore:

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 

Come posso risolvere questo problema?

+0

Credo che il problema potrebbe essere correlato a addSample() in attesa di una matrice a 2 dimensioni per entrambi i parametri, ma sto passando in un 1- matrice dimensionale. Sono un po 'confuso su come rendere l'array di destinazione bidimensionale in quanto vi è solo una variabile di destinazione per ogni esempio di allenamento. – User

risposta

8

Dopo un sacco di sperimentazione e rileggendo la dataset documentation, i seguenti percorsi senza errori:

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 

devo ricontrollare che sta facendo la cosa giusta.

0

Ho scritto una piccola funzione per fare questo

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