Факел / Луа, как увеличить истинную положительную скорость с помощью многослойной нейронной сети персептрона, примененной к несбалансированному набору данных? - PullRequest
0 голосов
/ 14 ноября 2018

Я реализовал многослойную нейронную сеть персептрона в Torch / lua и применил ее к несбалансированному набору данных (33 функции, около 300 элементов, из которых приблизительно 70% отрицательных и 30% положительных элементов).

Я перепробовал несколько моделей и несколько настроек.С текущей моделью я могу получить довольно высокую истинную отрицательную ставку (около 0,7), но довольно низкую истинную положительную ставку (около 0,3). Я действительно хочу улучшить свою истинную положительную ставку, но как?

Я делю набор данных на обучающий набор, набор проверки и набор тестов и использую набор проверки, чтобы найти наибольшее количество скрытых слоев и скрытых единиц.В настоящее время я использую скорость обучения = 0,1 и итераций = 1000. Функция активации - Sigmoid.Я попробовал несколько приемов нейронной сети (импульс, выпадение, инициализация Xavier), но они не привели к каким-либо улучшениям.

В прошлом я работал с другими несбалансированными наборами данных и всегда мог получать хорошие показатели даже наменьший класс.Но не в этот раз ...

Удивительно, что моя нейронная сеть неплохо справляется во время обучения, потому что я вижу среднеквадратическую ошибку, которая очень быстро падает.Так что я ожидаю хороших результатов и на тестовом наборе, но этого не происходит.

Что я могу сделать, чтобы улучшить свой истинный положительный показатель?

Вот моймодель:

 perceptron = nn.Sequential()  

  perceptron:add(nn.Linear(this_input_number, this_hidden_units))
  perceptron:add(nn.Sigmoid())

  for w=1,this_hidden_layers do
    perceptron:add(nn.Linear(this_hidden_units, this_hidden_units))
    perceptron:add(nn.Sigmoid())
  end
  perceptron:add(nn.Linear(this_hidden_units, this_output_number))

А вот, например, ошибка MSE во время обучения второй модели:

$$$ hidden_units = 25    hidden_layers = 1 $$$  
completion: 10% (epoch=100)(element=194) loss = 0.04    error progress = 3.56623%
completion: 20% (epoch=200)(element=194) loss = 0.004   error progress = 2.2678%
completion: 30% (epoch=300)(element=194) loss = 0   error progress = 1.56329%
completion: 40% (epoch=400)(element=194) loss = 0.001   error progress = 1.2053%
completion: 50% (epoch=500)(element=194) loss = 0.003   error progress = 0.98677%
completion: 60% (epoch=600)(element=194) loss = 0.004   error progress = 0.84489%
completion: 70% (epoch=700)(element=194) loss = 0   error progress = 0.74345%
completion: 80% (epoch=800)(element=194) loss = 0   error progress = 0.67081%
completion: 90% (epoch=900)(element=194) loss = 0.021   error progress = 0.69629%
completion: 100% (epoch=1000)(element=194) loss = 0.001     error progress = 0.67999%

Как видите, ошибка быстро обнуляется.

Вы можете найти мой полный рабочий код факела здесь , с включенным набором данных.Вы можете протестировать мой код на своем компьютере и попробовать некоторые дополнительные варианты метода.

Есть ли у вас какие-либо предложения о том, как увеличить истинный положительный показатель?Спасибо!

...