Как правильно комбинировать мои классификаторы?

  • Мне нужно решить задачу классификации 2 класса.
  • У меня есть 2 классификатора, которые выводят вероятности. Обе они представляют собой нейронные сети разной архитектуры. Эти 2 классификатора обучаются и сохраняются в 2 файла.

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

Эта модель описана здесь:
http://rasbt.github.io/mlxtend/user_guide/classifier/StackingClassifier/#stackingclassifier
Я планирую использовать библиотеку mlxtend, но похоже, что StackingClassifier обновляет модели.
Я не хочу ремонтировать, потому что это занимает очень много времени.
С другой стороны, я понимаю, что переоборудование необходимо для «согласования» работы каждого классификатора и «настройки» всей системы.

Что мне делать в такой ситуации?


person Vladimir Tsyshnatiy    schedule 02.08.2017    source источник
comment
Вы можете искать параметр freeze или freeze_weights. Затем вы замораживаете веса обеих нейронных сетей, позволяя обучать только комбайнеру. В качестве альтернативы вы всегда можете сделать это вручную, сначала сгенерировав вывод обеих NN для всех данных, а затем подав объединителю только вывод двух NN.   -  person Martin Thoma    schedule 03.08.2017


Ответы (1)


Я не буду говорить о mlxtend, потому что я не работал с этим, но я расскажу вам общую идею.

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

В частности, разделите данные обучения на несколько частей (обычно от 3 до 10). Сохраните одну часть (то есть сгиб) в качестве данных для проверки и тренируйте обе модели на других сгибах. Затем спрогнозируйте вероятности данных проверки, используя обе модели. Повторите процедуру, рассматривая каждую складку как набор для проверки. В конце концов, у вас должны быть вероятности для всех точек данных в обучающем наборе.

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

person Stergios    schedule 02.08.2017
comment
Спасибо за Ваш ответ! Ваша общая идея: возьмите классификаторы, подогнайте их, сделайте прогноз с их помощью и сохраните прогнозы. После этого создайте мета-классификатор и подогнайте его, используя прогнозы классификаторов нижнего уровня с использованием перекрестной проверки. Пожалуйста, поправьте меня, если я не понял. На самом деле я думал об этом, но не мог найти способ сделать это с помощью mlxtend. Не могли бы вы посоветовать мне инструмент, который подходит для этой задачи? - person Vladimir Tsyshnatiy; 02.08.2017
comment
Да все верно. Хотя я не знаю mlxtend, я уверен, что вы можете сделать это там. Однако вам, вероятно, придется написать свой собственный код, чтобы получить вероятности перекрестной проверки. Также проверьте это в scikit-learn: scikit-learn.org/ стабильный / модули / сгенерированный / - person Stergios; 02.08.2017