Сведения о вопросе

SOON

14:39, 13th August, 2020

Критерии выбора значимых признаков для SVM классификации (метод опорных векторов)?

Просмотров: 345   Ответов: 1

Привет, друзья!


Помогите пожалуйста советом или ссылкой.


Как правильно выбирать признаки для SVM классификации? Нужно ли при этом нормализовывать численные значения этих признаков?


Есть задача — с помощью SVM научиться отделять зерна от плевел.

У зерен есть некоторые характерные признаки по которым их можно выделять, но какие именно признаки брать?

Приведу пример. Допустим у зерна есть вес в миллиграммах. У плевла тоже есть вес, но в среднем отличный от зернового. Можно ли в качестве признака брать вес зерна или нужно брать логарифм от веса, ведь бывают очень мелкие зерна, а бывают очень крупные?


Как правильно подбирать соотношение зерен и плевел в обучающей выборке? Каким оно должно быть? 50/50? Или взятым из реальной жизни — собрали урожай зерна, взяли из него горстку и по ней сделали выборку (т.е. соотношение близко к реальному)?


Что делать если количество зерен в реальности (в обучающей выборке) относится к количеству плевел как 1/200? Портит ли это обучающую выборку?

Ведь нужно выделить именно зерна — они важны, а их как раз очень мало.


Есть ли какой-нибудь мануал из серии «SVM для чайников», где освещались бы эти вопросы простые вопросы на пальцах, без решения сложных систем уравнений?



  Сведения об ответе

COOL

20:46, 9th August, 2020

Прежде всего, не нужно зацикливаться на SVM: это всего лишь один из многих методов классификации. Да, у SVM есть своя специфика (у других методов — своя), но на данном этапе Вы вполне можете использовать общие алгоритмы предобработки данных.

какие именно признаки брать?
Это называется feature selection и feature extraction.

Простыми словами, процесс выглядит так:
1. Составляем список имеющихся признаков.
2. Добавляем в него различные функции от признаков (как упомянутый логарифм от веса), комбинации разных признаков (например, длина*ширина*высота), и т.п. Что именно комбинировать и какие преобразования использовать, должно подсказать знание задачи и здравый смысл. Этот процесс относится к feature extraction.
3. Задаём функцию ошибки, то есть определяем как будет оцениваться точность классификации. Например, это может быть отношение правильно распознанных примеров к их общему количеству. Здесь полезно почитать про precision and recall.
4. Переходим на один уровень абстракции выше.
Представим эдакий чёрный ящик, внутри которого находится классификатор вместе с обучающей и тестирующей выборками. На входе ящика — двоичный вектор, указывающий, какие признаки должен использовать классификатор; на выходе — величина ошибки классификации (на тестовой выборке).

Таким образом, задача выбора признаков сводится к задаче оптимизации: нужно найти такой входной вектор, при котором выходное значение ящика (ошибка классификации) будет минимально. Можно, например, добавлять признаки по одному (начиная с тех, которые сильнее всего улучшают результат) — см. градиентный спуск. Можно использовать что-то посерьёзнее, типа генетических алгоритмов.

Нужно ли при этом нормализовывать численные значения этих признаков?
Это сильно зависит от конкретной задачи и самих признаков.

Что делать если количество зерен в реальности (в обучающей выборке) относится к количеству плевел как 1/200? Портит ли это обучающую выборку?
В общем случае, портит: если одних примеров гораздо меньше, чем других, существует риск, что классификатор «запомнит» примеры из обучающей выборки, и не сможет адекватно разпознавать другие похожие примеры (Overfitting).
К тому же, если используется простейшая функция ошибки (правильно_распознанных / размер_выборки), философски настроенный классификатор может всегда отвечать «плевел» — и в 99.5% случаев будет прав :)


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться