7

У меня проблема классификации (предсказывающая, принадлежит ли последовательность классу или нет), для чего я решил использовать несколько методов классификации, чтобы помочь отфильтровать ложные срабатывания.При использовании нескольких классификаторов - как измерить производительность ансамбля? [SciKit Learn]

(Проблема в биоинформатике - классификация белковых последовательностей как последовательность предшественников нейропептидов. Here's the original article, если кому-то интересно, and the code used to generate features and to train a single predictor).

Теперь классификаторы имеют примерно одинаковые показатели производительности (точность и точность/точность 83-94%) в обучающем наборе для 10-кратного CV), поэтому мой «наивный» подход состоял в том, чтобы просто использовать несколько классификаторов (Random Forests , ExtraTrees, SVM (линейное ядро), SVM (ядро RBF) и GRB) и использовать простое большинство голосов.

МОЙ вопрос: Как получить показатели производительности для разных классификаторов и/или предсказания их голосов? То есть, я хочу посмотреть, не влияет ли использование нескольких классификаторов на мою производительность, или какая из них их сочетает.

Моей интуицией, возможно, является использование оценки ROC, но я не знаю, как «объединить» результаты и получить ее из комбинации классификаторов. (То есть, чтобы увидеть, что кривая ROC предназначена только для каждого классификатора в одиночку [уже известна], затем увидеть кривую ROC или AUC для данных обучения, используя комбинации классификаторов).

(В настоящее время я фильтрую предсказания с использованием «вероятности прогноза» с помощью методов Random Forests и ExtraTrees, затем я произвольно фильтрую результаты с прогнозируемой оценкой ниже «0.85». Дополнительным слоем фильтрации является «сколько классификаторов согласуют это положительная классификация этого белка »).

спасибо!

(The website реализации, где мы используем несколько классификаторов - http://neuropid.cs.huji.ac.il/)

Весь притон реализованы с помощью SciKit учиться и питона. Цитаты и все!)

+0

Это как-то не в тему вопрос, но вы нашли готовые функции набора и классы для нескольких систем классификаторов в skilearn или вы его закодировали вручную? (специально для чего-то вроде слияния путем обучения) –

+1

Я закодировал его вручную; удивительно, что для кластеров/фьюзеров классификаторов нет ничего (кроме уже существующих моделей, таких как AdaBoost, Forest ансамбли и т. д.). – GrimSqueaker

+1

Укладку или скрининг не сложно сделать наивно, например; http://stackoverflow.com/questions/21506128/best-way-to-combine-probabilistic-classifiers-in-scikit-learn – GrimSqueaker

ответ

7

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

Обратите внимание, что RF и Extra Trees уже представляют собой алгоритмы ансамбля в своем собственном праве.

Альтернативный подход (опять же, чтобы убедиться, что подход ансамбля) заключается в том, чтобы взять вероятности и \ или метки, выводимые вашими классификаторами, и передать их в другой классификатор (например, DT, RF, SVM или что-то еще) предсказание путем объединения лучших догадок из этих других классификаторов. Это называется "Stacking"

+0

Спасибо! (Итак, объедините результаты ансамблей и рассмотрите их как один предиктор или изучите укладку?). – GrimSqueaker

+0

Существует не так много, чтобы учиться с укладкой. Просто оптимизируйте отдельные алгоритмы, затем введите их результаты в другой учащийся. Пожалуйста, отметьте как ответ, если он ответит на ваш вопрос. – Simon

2

Вы можете использовать линейную регрессию для укладки.Для каждого в 10 раз, вы можете разделить данные с:

  • 8 Обучение наборы
  • 1 проверки установлено
  • 1 Испытательная установка

Оптимизировать гипер-параметров для каждого алгоритма с использованием набор тренировок и набор валидации, затем складывайте свои прогнозы с помощью линейной регрессии - или логистической регрессии - над набором проверки. Конечной моделью будет p = a_o + a_1 p_1 + ... + a_k p_K, где K - число классификаторов, p_k - вероятность, заданная моделью k, а a_k - вес модели k. Вы также можете напрямую использовать прогнозируемые результаты, если модель не дает вам вероятности.

Если ваши модели одинаковы, вы можете оптимизировать параметры моделей и веса в одно и то же время.

Если у вас есть очевидные различия, вы можете делать разные бункеры с разными параметрами для каждого. Например, один бит может быть короткими последовательностями и другими длинными последовательностями. Или различные типы белков.

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

Возможно, вам захочется взглянуть на решение Belkor 2007 по задачам Netflix, раздел Blending. В 2008 и 2009 годах они использовали более продвинутую технику, она также может быть интересна для вас.

+0

Действительно ли лучше использовать Log Reg, когда я уже выбрал модели, которые могут обеспечить вероятностный выход? (Я пытался использовать log.reg и сигмоидальное ядро ​​+ SVM во время тренировки, но производительность была очень плохой). Спасибо! – GrimSqueaker

 Смежные вопросы

  • Нет связанных вопросов^_^