mam jakiś działający kod, który poprawnie wczytuje dane z pliku csv do PyBrain Dataset:PyBrain: Ładowanie danych za pomocą 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
Teraz próbuję przepisać ten kod, aby zamiast użyć funkcji loadtxt NumPy użytkownika. Wierzę, że addSample może pobierać numpy tablic zamiast dodawać dane po jednym wierszu naraz.
Zakładając, że moja załadowana tablica numpy ma wymiar m x n, jak przekazać pierwszy zbiór danych m x (n-1) jako pierwszy parametr, a ostatnia kolumna danych jako drugi parametr? To jest to, co usiłuję:
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
Ale ja otrzymuję następujący błąd:
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
Jak mogę rozwiązać ten problem?
Myślę, że problem może być związany z addSample() spodziewa się 2-wymiarową tablicę dla obu parametrów, jednak mam przechodzącą w 1- tablica wymiarowa. Jestem nieco zdezorientowany, jak uczynić tablicę celów dwuwymiarową, ponieważ istnieje tylko jedna zmienna docelowa na przykład treningowy. – User