Я пытаюсь выяснить правильный способ сделать 5-кратное перекрестное подтверждение в pybrain. Я просмотрел их документацию, но это не помогло. Я нашел следующие две версии кода онлайн:Перекрестная проверка в Pybrain
Нашел этот вопрос в вопросе here.
net = pybrain.tools.shortcuts.buildNetwork(5, 8, 1)
trainer = BackpropTrainer(net, ds)
evaluation = ModuleValidator.classificationPerformance(trainer.module, ds)
validator = CrossValidator(trainer=trainer, dataset=trainer.ds, n_folds=5, valfunc=evaluation)
print(validator.validate())
Error:
evaluation = ModuleValidator.classificationPerformance(trainer.module, ds)File ".../pybrain/tools/validation.py", line 168, in classificationPerformancedataset)
File ".../pybrain/tools/validation.py", line 204, in validate return valfunc(output, target)
File ".../pybrain/tools/validation.py", line 33, in classificationPerformance return float(n_correct)/float(len(output))
TypeError: only length-1 arrays can be converted to Python scalars
И второй один here.
modval = ModuleValidator()
for i in range(1000):
trainer.trainEpochs(1)
trainer.trainOnDataset(dataset=trndata)
cv = CrossValidator(trainer, trndata, n_folds=5, valfunc=modval.MSE)
print "MSE %f @ %i" %(cv.validate(), i)
Error - trainer.train()
File ".../rprop.py", line 43, in train for seq in self.ds._provideSequences():
AttributeError: 'NoneType' object has no attribute '_provideSequences'
Я пошел к исходному коду, чтобы попытаться проследить причину ошибки, но не мог понять, что мне нужно изменить. Любая помощь оценивается.
Когда я запускал свой код, просто разделив набор данных на 3 части (обучение, проверка и тестирование), он работал хорошо. Я получаю эти ошибки только тогда, когда я пытался реализовать кросс-валидность k-fold.
Вы могли решить эту проблему? – displayname
Нет, я не мог. Мне пришлось отказаться от этого подхода. – Champ
[Я думаю, проблема в том, что они используют 'sum()' вместо 'np.sum()'] (https://github.com/pybrain/pybrain/issues/182). – displayname