Прежде всего, не нужно зацикливаться на SVM: это всего лишь один из многих методов классификации. Да, у SVM есть своя специфика (у других методов — своя), но на данном этапе Вы вполне можете использовать общие алгоритмы предобработки данных.
какие именно признаки брать?
Это называется
feature selection и
feature extraction.
Простыми словами, процесс выглядит так:
1. Составляем список имеющихся признаков.
2. Добавляем в него различные функции от признаков (как упомянутый логарифм от веса), комбинации разных признаков (например, длина*ширина*высота), и т.п. Что именно комбинировать и какие преобразования использовать, должно подсказать знание задачи и здравый смысл. Этот процесс относится к feature extraction.
3. Задаём функцию ошибки, то есть определяем как будет оцениваться точность классификации. Например, это может быть отношение правильно распознанных примеров к их общему количеству. Здесь полезно почитать про
precision and recall.
4. Переходим на один уровень абстракции выше.
Представим эдакий чёрный ящик, внутри которого находится классификатор вместе с обучающей и тестирующей выборками. На входе ящика — двоичный вектор, указывающий, какие признаки должен использовать классификатор; на выходе — величина ошибки классификации (на тестовой выборке).
Таким образом, задача выбора признаков сводится к задаче оптимизации: нужно найти такой входной вектор, при котором выходное значение ящика (ошибка классификации) будет минимально. Можно, например, добавлять признаки по одному (начиная с тех, которые сильнее всего улучшают результат) — см.
градиентный спуск. Можно использовать что-то посерьёзнее, типа
генетических алгоритмов.
Нужно ли при этом нормализовывать численные значения этих признаков?
Это сильно зависит от конкретной задачи и самих признаков.
Что делать если количество зерен в реальности (в обучающей выборке) относится к количеству плевел как 1/200? Портит ли это обучающую выборку?
В общем случае, портит: если одних примеров гораздо меньше, чем других, существует риск, что классификатор «запомнит» примеры из обучающей выборки, и не сможет адекватно разпознавать другие похожие примеры (
Overfitting).
К тому же, если используется простейшая функция ошибки (правильно_распознанных / размер_выборки), философски настроенный классификатор может всегда отвечать «плевел» — и в 99.5% случаев будет прав :)