Я пытаюсь решить эту проблему Kaggle, используя Neural Networks. Я использую библиотеку Pybrain Python.
Это классическая контролируемая проблема обучения. В следующем коде: переменная "data" представляет собой массив numpy (892 * 8). 7 полей - мои функции, а 1 поле - мое выходное значение, которое может быть "0" или "1" .
from pybrain.datasets import ClassificationDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.shortcuts import buildNetwork
dataset = ClassificationDataSet(7,1)
for i in data:
    dataset.appendLinked(i[1:],i[0])
net = buildNetwork(7,9,7,1, bias = True,hiddenclass = SigmoidLayer, outclass = TanhLayer)
trainer = BackpropTrainer(net, learningrate = 0.04, momentum = 0.96, weightdecay = 0.02, verbose = True)
trainer.trainOnDataset(dataset, 8000)
trainer.testOnData(verbose = True)
После обучения моей нейронной сети, когда я тестирую ее на Training Data, она всегда дает один вывод для всех входных данных. Как:
Testing on data:
out:     [  0.075]
correct: [  1.000]
error:  0.42767858
out:     [  0.075]
correct: [  0.000]
error:  0.00283875
out:     [  0.075]
correct: [  1.000]
error:  0.42744569
out:     [  0.077]
correct: [  1.000]
error:  0.42616996
out:     [  0.076]
correct: [  0.000]
error:  0.00291185
out:     [  0.076]
correct: [  1.000]
error:  0.42664586
out:     [  0.075]
correct: [  1.000]
error:  0.42800026
out:     [  0.076]
correct: [  1.000]
error:  0.42719380
out:     [  0.076]
correct: [  0.000]
error:  0.00286796
out:     [  0.076]
correct: [  0.000]
error:  0.00286642
out:     [  0.076]
correct: [  1.000]
error:  0.42696969
out:     [  0.076]
correct: [  0.000]
error:  0.00292401
out:     [  0.074]
correct: [  0.000]
error:  0.00274975
out:     [  0.076]
correct: [  0.000]
error:  0.00286129
Я попробовал изменить learningRate, weightDecay, импульс, количество скрытых единиц, количество скрытых слоев, класс скрытых слоев, класс выходных слоев, чтобы решить его, но в каждом случае он дает одинаковый вывод для каждого входа, если вход происходит из данных обучения.
Я думаю, что я должен запускать его более 8000 раз, потому что, когда я строил Neural Network для "XOR" , потребовалось по крайней мере 700 итераций, прежде чем он начал давать ошибки в наномасштабном масштабе. Размер данных обучения на "XOR" был всего 4, тогда как в этом случае это 892. Таким образом, я выполнил 8000 итераций на 10% исходных данных (теперь размер данных обучения составляет 89), даже тогда он выдавал одинаковый результат для каждого входа в данных обучения. И поскольку я хочу классифицировать ввод в "0" или "1" , если я использую класс Output Layer для Softmax, он всегда дает "1" в качестве вывода.
Независимо от того, какую конфигурацию (количество скрытых единиц, класс выходного уровня, скорость обучения, класс скрытого слоя, импульс), я использовал в "XOR" , он более или менее начинал сходиться в каждом случае.
Возможно ли, что существует некоторая конфигурация, которая, в конечном итоге, приведет к снижению частоты ошибок. По крайней мере, некоторая конфигурация, чтобы он не выдавал одинаковый результат для всех входов в данных обучения.
Я запустил его для 80 000 итераций (размер данных обучения - 89). Образец вывода:
Testing on data:
out:     [  0.340]
correct: [  0.000]
error:  0.05772102
out:     [  0.399]
correct: [  0.000]
error:  0.07954010
out:     [  0.478]
correct: [  1.000]
error:  0.13600274
out:     [  0.347]
correct: [  0.000]
error:  0.06013008
out:     [  0.500]
correct: [  0.000]
error:  0.12497886
out:     [  0.468]
correct: [  1.000]
error:  0.14177601
out:     [  0.377]
correct: [  0.000]
error:  0.07112816
out:     [  0.349]
correct: [  0.000]
error:  0.06100758
out:     [  0.380]
correct: [  1.000]
error:  0.19237095
out:     [  0.362]
correct: [  0.000]
error:  0.06557341
out:     [  0.335]
correct: [  0.000]
error:  0.05607577
out:     [  0.381]
correct: [  0.000]
error:  0.07247926
out:     [  0.355]
correct: [  1.000]
error:  0.20832669
out:     [  0.382]
correct: [  1.000]
error:  0.19116165
out:     [  0.440]
correct: [  0.000]
error:  0.09663233
out:     [  0.336]
correct: [  0.000]
error:  0.05632861
Средняя ошибка: 0.112558819082
('Максимальная ошибка:', 0.21803000849096299, 'Средняя ошибка:', 0.096632332865968451)
Он дает все выходы в пределах диапазона (0.33, 0.5).
