Какой машинный классификатор обучения выбрать в целом?

Предположим, что я работаю над некоторой проблемой классификации. (Обнаружение мошенничества и спам комментариев - это две проблемы, над которыми я работаю прямо сейчас, но мне интересно узнать о какой-либо задаче классификации вообще.)

Как узнать, какой классификатор я должен использовать?

  • Дерево решений
  • SVM
  • байесовский
  • Нейронная сеть
  • K-ближайших соседей
  • Q-обучения
  • Генетический алгоритм
  • Марковские процессы принятия решений
  • Сверточные нейронные сети
  • Линейная регрессия или логистическая регрессия
  • Усиление, упаковывание в мешки, эякуляция
  • Случайное восхождение на холм или имитированный отжиг
  • ...

В каких случаях один из них является "естественным" первым выбором и каковы принципы выбора этого?

Примеры типа ответов, которые я ищу (от Manning et al. Введение в информационный поиск):

а. Если ваши данные помечены, но у вас ограниченная сумма, вы должны использовать классификатор с большим уклоном (например, Naive Bayes).

Я предполагаю, что это связано с тем, что классификатор с более высоким уровнем смещения будет иметь более низкую дисперсию, что хорошо из-за небольшого объема данных.

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

  1. Каковы другие рекомендации? Даже такие ответы, как "если вам придется объяснить свою модель какому-то высшему руководству, тогда, возможно, вам следует использовать дерево решений, так как правила принятия решений достаточно прозрачны" - это хорошо. Тем не менее, я забочусь о проблемах с реализацией/библиотекой.

  2. Кроме того, для некоторого отдельного вопроса, помимо стандартных байесовских классификаторов, существуют ли стандартные "современные" методы для обнаружения спама комментариев (в отличие от спама электронной почты)?

Ответ 1

enter image description here

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

Если вы Predicting Category:

  • У вас есть Labeled Data
    • Вам нужно следовать Classification Approach и его алгоритмы
  • У вас нет Labeled Data
    • Вам нужно перейти Clustering Approach

Если вы Predicting Quantity:

  • Вам нужно перейти на Regression Approach

В противном случае

  • Вы можете выбрать Dimensionality Reduction Approach

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

Источник: http://scikit-learn.org/stable/tutorial/machine_learning_map/

Ответ 2

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

Перекрестная проверка

Вы просто разбиваете свой набор данных на k непересекающихся подмножеств (сгибов), обучаете модель с использованием k-1 сгибов и прогнозируете ее производительность, используя сгиб, который вы исключили. Это вы делаете для каждой возможной комбинации сгибов (сначала оставьте 1-й сгиб, затем 2-й,..., затем kth и тренируйтесь с оставшимися сгибами). После финиша вы оцениваете среднюю производительность всех сгибов (возможно, также дисперсию/стандартное отклонение производительности).

Как выбрать параметр k, зависит от того, сколько времени у вас есть. Обычными значениями для k являются 3, 5, 10 или даже N, где N - размер ваших данных (такой же, как перекрестная проверка с пропуском). Я предпочитаю 5 или 10.

Выбор модели

Допустим, у вас есть 5 методов (ANN, SVM, KNN и т.д.) И 10 комбинаций параметров для каждого метода (в зависимости от метода). Вам просто нужно выполнить перекрестную проверку для каждой комбинации метода и параметра (5 * 10 = 50) и выбрать лучшую модель, метод и параметры. Затем вы переобучаетесь с лучшими методами и параметрами для всех ваших данных, и у вас есть окончательная модель.

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

Вложенная перекрестная проверка

Во вложенной перекрестной проверке вы выполняете перекрестную проверку для алгоритма выбора модели.

Опять же, вы сначала разбиваете свои данные на k сгибов. После каждого шага вы выбираете k-1 в качестве тренировочных данных, а оставшийся - в качестве тестовых данных. Затем вы запускаете выбор модели (процедура, которую я объяснил выше) для каждой возможной комбинации этих k сгибов. После этого у вас будет k моделей, по одной на каждую комбинацию сгибов. После этого вы тестируете каждую модель с оставшимися тестовыми данными и выбираете лучшую. Опять же, имея последнюю модель, вы тренируете новую с тем же методом и параметрами для всех имеющихся у вас данных. Это ваша окончательная модель.

Конечно, есть много вариантов этих методов и других вещей, которые я не упомянул. Если вам нужна дополнительная информация о них, поищите несколько публикаций по этим темам.

Ответ 3

В книге " OpenCV" есть две большие страницы на странице страницы 462-463. Поиск превью Amazon для слова "дискриминационный" (вероятно, книги Google) также позволит вам увидеть страницы, о которых идет речь. Эти две страницы - величайший камень, который я нашел в этой книге.

Короче:

  • Повышение - часто эффективно, когда доступно большое количество данных обучения.

  • Случайные деревья - часто очень эффективны, а также могут выполнять регрессию .

  • K-ближайшие соседи - простейшая вещь, которую вы можете сделать, часто эффективная, но медленная и требуется много памяти.

  • Нейронные сети - Медленно тренироваться, но очень быстро запускать, по-прежнему оптимальный исполнитель для распознавания букв strong > .

  • SVM - Среди лучших с ограниченными данными, но проигрывает против повышения или случайные деревья, только если доступны большие наборы данных.

Ответ 4

Вещи, которые вы могли бы рассмотреть при выборе того, какой алгоритм использовать, будут включать:

  • Вам нужно тренироваться постепенно (в отличие от партии)?

    Если вам нужно часто обновлять свой классификатор новыми данными (или у вас много данных), вы, вероятно, захотите использовать байесовский. Нейронные сети и SVM должны работать над данными обучения за один раз.

  • Являются ли ваши данные состоящими только из категориальных, или только для цифр, или для обоих?

    Я думаю, что Байесян лучше всего работает с категориальными/биномиальными данными. Деревья принятия решений не могут предсказать числовые значения.

  • Вам или вашей аудитории необходимо понять, как работает классификатор?

    Используйте байесовские деревья или деревья решений, так как это легко объяснить большинству людей. Нейронные сети и SVM являются "черными ящиками" в том смысле, что вы не можете действительно увидеть, как они классифицируют данные.

  • Сколько вам нужна скорость классификации?

    SVM бывают быстрыми, когда дело доходит до классификации, поскольку им нужно только определить, на какой стороне "линии" находятся ваши данные. Деревья принятия решений могут быть медленными, особенно когда они сложны (например, множество ветвей).

  • Сложность.

    Нейронные сети и СВМ могут обрабатывать сложную нелинейную классификацию.

Ответ 5

Как часто говорит профессор Эндрю Нг: всегда начинайте с реализации грубого, грязного алгоритма, а затем итеративно уточняйте его.

Для классификации Naive Bayes является хорошим стартером, так как он имеет хорошие характеристики, обладает высокой масштабируемостью и может адаптироваться практически к любому виду классификации. Кроме того, 1NN (K-Nearest Neighbors только с одним соседом) - это алгоритм с наилучшим выбором (поскольку данные будут моделью, и, следовательно, вам не нужно заботиться о размерности ваша граница принятия решения), единственная проблема заключается в стоимости вычислений (квадратичная, потому что вам нужно вычислить матрицу расстояний, поэтому она может быть не очень хорошей для высокоразмерных данных).

Другим хорошим стартовым алгоритмом является Random Forests (состоящий из деревьев решений), который очень масштабируемо для любого числа измерений и имеет в целом вполне приемлемые характеристики. Затем, наконец, существуют генетические алгоритмы, которые отлично масштабируются для любого измерения и любых данных с минимальным знанием самих данных, причем самой минимальной и самой простой реализацией является микробный генетический алгоритм (только одна строка кода C! by Inman Harvey в 1996 году), и одним из самых сложных является CMA-ES и MOGA/e-MOEA.

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

В качестве примечания, если вы хотите, чтобы теоретическая основа проверяла ваши гипотезы и алгоритмы теоретических характеристик для данной проблемы, вы можете использовать PAC (возможно, примерно правильную) структуру обучения (будьте осторожны: он очень абстрактный и сложный!), но в резюме, суть изучения PAC говорит, что вы должны использовать менее сложную, но достаточно сложную (сложность - максимальная размерность, которая может соответствовать алгоритму), который может соответствовать вашим данным. Другими словами, используйте бритву Occam.

Ответ 7

Я считаю, что вы всегда запускаете базовые классификаторы, чтобы получить представление о ваших данных. Чаще всего (по крайней мере, по моему опыту) они были достаточно хороши.

Итак, если вы контролируете данные, подготовьте классификатор Naive Bayes. Если у вас есть неконтролируемые данные, вы можете попробовать кластеризацию k-mean.

Другим ресурсом является одно из лекционных видеороликов серии Stanford Machine Learning, которое я некоторое время наблюдал. На видео 4 или 5, я думаю, лектор обсуждает некоторые общепринятые конвенции при обучении классификаторов, преимуществах/компромиссах и т.д.

Ответ 8

Вы всегда должны учитывать компромисс вывод и прогноз.

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

Ответ 9

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

Это краткая шпаргалка для базового машинного обучения.

Here you can validate your scenario with a simple cheat sheet

Ответ 10

Я бы предложил попробовать LightGBM. Это реализация GradientBoosting Machines, разработанная Microsoft.

Ответ 11

Использовать следующий алгоритм для классификации

  1. Логистическая регрессия.
  2. K-Ближайшие соседи (K-NN).
  3. Машина опорных векторов (SVM)
  4. Ядро СВМ.
  5. Наивный байесовский.
  6. Классификация дерева решений
  7. Классификация случайных лесов.
  8. ИНС (Tensorflow).
  9. CNN.