2012-04-12 28 views
5

Tôi có một số mã làm việc mà tải một cách chính xác dữ liệu từ một tập tin csv thành một PyBrain Dataset:PyBrain: Đang tải dữ liệu với 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 

Bây giờ tôi đang cố gắng để viết lại đoạn mã này để sử dụng chức năng loadtxt NumPy của thay thế. Tôi tin rằng addSample có thể lấy các mảng có nhiều mảng hơn là phải thêm dữ liệu vào một hàng tại một thời điểm.

Giả sử mảng đã được nạp của tôi là m x n chiều, làm cách nào để truyền dữ liệu m x (n-1) đầu tiên làm tham số đầu tiên và cột dữ liệu cuối cùng làm tham số thứ hai? Đây là những gì tôi đang cố gắng:

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 

Nhưng tôi nhận được lỗi sau:

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 

Làm thế nào tôi có thể sửa lỗi này?

+0

Tôi nghĩ rằng vấn đề có thể liên quan đến addSample() mong đợi một mảng 2 chiều cho cả các thông số, tuy nhiên tôi đang đi qua trong một 1- mảng chiều. Tôi là một chút bối rối như thế nào để làm cho các mảng mục tiêu 2 chiều như chỉ có một biến mục tiêu duy nhất cho mỗi ví dụ đào tạo. – User

Trả lời

8

Sau rất nhiều thử nghiệm và tái đọc dataset documentation, chạy sau mà không có lỗi:

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 

tôi phải kiểm tra xem nó đang làm điều đúng đắn gấp đôi.

0

Tôi đã viết một hàm nhỏ để làm điều này

def load_csv(filename, cols, sep = ',', skip = 0): 
    from numpy import loadtxt 
    data = loadtxt(filename, delimiter = sep, usecols = cols, skiprows = skip) 
    return data 
Các vấn đề liên quan