Какой классификатор машинного обучения вообще выбрать? [закрыто]

207

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

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

  1. Древо решений
  2. SVM
  3. байесовский
  4. Нейронная сеть
  5. K-ближайшие соседи
  6. Q-обучения
  7. Генетический алгоритм
  8. Марковские процессы принятия решений
  9. Сверточные нейронные сети
  10. Линейная регрессия или логистическая регрессия
  11. Повышение, укладка, упаковка
  12. Случайное восхождение на холм или имитация отжига
  13. ...

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

Примеры типов ответов, которые я ищу (из книги « Введение в поиск информации» Мэннинга и др. ):

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

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

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

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

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

Люмен
источник
7
В ответ на ваше «лучшее место, чтобы задать этот вопрос», вы также можете попробовать stats.stackexchange.com
jxramos

Ответы:

94

введите описание изображения здесь

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

Если вы 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/

Мукеш Чапагейн
источник
60

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

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

Вы просто разбиваете свой набор данных на 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 моделей, по одной на каждую комбинацию сгибов. После этого вы тестируете каждую модель с оставшимися тестовыми данными и выбираете лучшую. Опять же, имея последнюю модель, вы тренируете новую с тем же методом и параметрами для всех имеющихся у вас данных. Это твоя последняя модель.

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

Джордж
источник
5
Да, я знаю о перекрестной проверке - меня больше интересовали априорные причины выбора определенного классификатора (а затем я мог бы использовать перекрестную проверку для настройки некоторых параметров или для выбора между небольшим набором классификаторов). Спасибо хоть!
Л.М.
45

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

Коротко:

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

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

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

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

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


источник
39

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

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

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

  2. Состоит ваши данные категоричен только, или числовой только, или как ?

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

  3. Нужно ли вам или вашей аудитории понимать, как работает классификатор?

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

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

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

  5. Сложность .

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

RPVC
источник
2
Эта глава книги может предоставить больше информации о сложности nlp.stanford.edu/IR-book/html/htmledition/…
supermus
31

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

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

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

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

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

gaborous
источник
11

Сэм Роуис раньше говорил, что вы должны попробовать наивный Байес, логистическую регрессию, k-ближайшего соседа и линейный дискриминант Фишера прежде всего.

Байера
источник
8

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

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

Другим ресурсом является одно из видео лекций из серии видеороликов Стэнфордского машинного обучения , которые я смотрел некоторое время назад. Я думаю, что в видео 4 или 5 лектор обсуждает некоторые общепринятые соглашения при обучении классификаторов, преимуществ / компромиссов и т. Д.

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

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

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

Хуан Камило Сапата
источник
3

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

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

Здесь вы можете проверить свой сценарий с помощью простой шпаргалки

Сарат Сахадеван
источник
-2

Прежде всего, это зависит от того, с какой проблемой вы сталкиваетесь, будь то классификация или регрессия. Тогда выбирайте свою модель с умом. Это зависит от конкретной модели, одна конкретная модель превосходит другие модели. Предположим, что вы работаете над wine_dataset из библиотеки sklearn, и сначала вы пытались обучить данные с помощью ядра svm с линейным, и вы получаете некоторую точность, а затем вы думаете, что это не удовлетворяет, поэтому вы попытались обучить ваши данные с помощью DecisionTreeClassifier () а затем вы попытались с RandomForestClassifier (). После того, как точность будет лучше, или вы можете сказать, что соответствует вашим данным, вы можете сделать вывод. Существует так мало синтаксических различий, которые вы обнаружите, продолжая менять модель для тестирования. Так что все лучше и лучше понять проблему.

Сартак Далабехера
источник
1
Вопрос OP (оригинальные постеры) был таким: Как мне узнать, какой классификатор мне следует использовать? Что делает вывод, что они ищут алгоритм классификации . Пожалуйста, внимательно прочитайте вопрос, прежде чем ответить.
Vetrivel PS