2012-04-12 13 views
5

que tienen un código de trabajo que carga correctamente los datos de un archivo CSV en un conjunto de datos PyBrain:PyBrain: ¿Cargando datos 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 

Ahora estoy tratando de volver a escribir el código para utilizar la función de loadtxt numpy lugar. Creo que addSample puede tomar matrices numpy en lugar de tener que agregar los datos una fila a la vez.

Suponiendo que mi matriz numpy cargada es m x n dimensional, ¿cómo paso el primer m x (n-1) conjunto de datos como el primer parámetro y la última columna de datos como el segundo parámetro? Esto es lo que trato:

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 

Pero estoy consiguiendo el error siguiente:

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 

¿Cómo puedo solucionar este problema?

+0

Creo que el problema podría estar relacionado con addSample() esperando una matriz de 2 dimensiones para ambos parámetros, sin embargo yo estoy de paso en un 1- matriz dimensional Estoy un poco confundido acerca de cómo hacer que la matriz objetivo sea bidimensional ya que solo hay una única variable objetivo por cada ejemplo de entrenamiento. – User

Respuesta

8

Después de mucha experimentación y volver a leer el dataset documentation, las siguientes carreras sin error:

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 

tengo que vuelva a comprobar que está haciendo lo correcto.

0

He escrito una pequeña función para hacer esto

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