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

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


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


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


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

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

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


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


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

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


Есть ли какой-нибудь мануал из серии «SVM для чайников», где освещались бы эти вопросы простые вопросы на пальцах, без решения сложных систем уравнений?
  • Вопрос задан
  • 5565 просмотров
Пригласить эксперта
Ответы на вопрос 1
YasonBy
@YasonBy
Прежде всего, не нужно зацикливаться на SVM: это всего лишь один из многих методов классификации. Да, у SVM есть своя специфика (у других методов — своя), но на данном этапе Вы вполне можете использовать общие алгоритмы предобработки данных.

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

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

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

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

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

Войдите, чтобы написать ответ

Похожие вопросы