Какая разница между классификаторами ANN, SVM и KNN?

Я знаю, что это очень общий вопрос без специфики моего фактического проекта, но мой вопрос:

Я делаю классификацию изображений дистанционного зондирования. Я использую объектно-ориентированный метод: сначала я сегментировал изображение в разных регионах, затем извлекаю функции из таких областей, как цвет, форма и текстура. Количество всех функций в регионе может составлять 30, и обычно всего 2000 регионов, и я выберу 5 классов с 15 образцами для каждого класса.

Вкратце:

  • Пример данных 1530
  • Данные испытаний 197530

Как выбрать правильный классификатор? Если есть 3 классификатора (ANN, SVM и KNN), которые я должен выбрать для лучшей классификации?

Ответ 1

Если ваши "данные образца" - это набор поездов, он кажется очень маленьким. Сначала я предлагаю использовать более 15 примеров для каждого класса.

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

Ответ 2

KNN - это самый базовый алгоритм машинного обучения для параметризации и реализации, но, как указано в @etov, скорее всего, будет превзойден SVM из-за небольших размеров данных обучения. Как отмечалось, АНН также ограничиваются недостаточными данными о тренировках. Однако KNN делает наименьшее количество предположений относительно ваших данных, кроме того, что точные данные обучения должны образовывать относительно дискретные кластеры. ANN и SVM, как правило, трудно поддаются параметризации, особенно если вы хотите повторить процесс с использованием нескольких наборов данных и полагаться на определенные предположения, например, что ваши данные являются линейно разделяемыми (SVM).

Я бы также рекомендовал алгоритм Random Forests, поскольку это легко реализовать и относительно нечувствительно к размеру данных обучения, но я бы посоветовал не использовать очень маленькие размеры данных обучения.

Модуль scikit-learn содержит эти алгоритмы и способен справляться с большими размерами данных для обучения, поэтому вы можете увеличить количество образцов учебных данных. лучший способ узнать наверняка будет их исследовать самостоятельно, как это предложил @etov