Один против остальных классификатор - PullRequest
0 голосов
/ 28 июля 2011

Я использую классификатор один против остальных , чтобы различать нейронные данные, соответствующие (1) перемещению компьютерного курсора вверх и (2) перемещению его в любом из семи других кардинальных направлений или нет движения. Я использую классификатор SVM с ядром RBF (созданным LIBSVM), и я выполнил поиск по сетке, чтобы найти наилучшие возможные параметры гаммы и стоимости для моего классификатора. Я попытался использовать данные тренировок с 338 элементами из каждого из двух классов (занижая выборку моего большого класса «отдыха») и использовал 338 элементов из моего первого класса и 7218 из моего второго с взвешенным SVM.

Я также использовал выбор функций, чтобы снизить количество используемых функций со 130 до 10. Я пытался использовать десять «лучших» функций и десять «худших» функций при обучении моего классификатора. Я также использовал весь набор функций.

К сожалению, мои результаты не очень хороши, и, кроме того, я не могу найти объяснение, почему. Я проверил с 37759 точками данных, из которых 1687 были из класса «один» (то есть «вверх»), а остальные 36072 из класса «остальные». Во всех случаях мой классификатор является точным на 95%, НО все значения, которые правильно спрогнозированы, попадают в класс «отдыха» (т.е. все мои точки данных прогнозируются как «остальные», а все значения, которые неверно предсказаны, попадают в «один»). "/" вверх "класс). Когда я попытался провести тестирование с 338 точками данных из каждого класса (те же, которые я использовал для обучения), я обнаружил, что число опорных векторов было 666, что на десять меньше, чем количество точек данных. В этом случае процент точности составляет всего 71%, что является необычным, поскольку мои данные о тренировках и тестировании совпадают.

Ты хоть представляешь, что может пойти не так? Если у вас есть предложения, пожалуйста, дайте мне знать.

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 апреля 2012

Набор тестовых данных, совпадающий с данными обучения, подразумевает, что ваша точность обучения составила 71%. В этом нет ничего плохого, поскольку данные, возможно, плохо разделялись используемым вами ядром. Тем не менее, одной из проблем является то, что число опорных векторов, которое является высоким, указывает на возможное переоснащение.

0 голосов
/ 23 августа 2011

Не уверен, что это равносильно ответу - вероятно, было бы трудно дать ответ, не видя данных на самом деле, - но вот некоторые идеи относительно проблемы, которую вы описываете:

  1. В общем, SVM пытается найти гиперплоскость, которая бы лучше всего разделяла ваши классы. Однако, так как вы выбрали классификацию 1 на 1, у вас нет выбора, кроме как смешать все отрицательные случаи вместе (ваш класс отдыха). Это может сделать «лучшее» разделение гораздо менее подходящим для решения вашей проблемы. Я предполагаю, что это может быть серьезной проблемой здесь. Чтобы проверить, так ли это, я предлагаю попробовать использовать только одно кардинальное направление в качестве отрицательного набора и посмотреть, улучшит ли это результаты. В этом случае вы можете обучить 7 классификаторов, по одному для каждого направления. Другим вариантом может быть использование опции мультикласса libSVM или инструмента, подобного SVMLight , который может классифицировать один против многих.
  2. Одним из предостережений большинства реализаций SVM является их неспособность поддерживать большие различия между положительными и отрицательными наборами даже при взвешивании. По моему опыту, весовые коэффициенты свыше 4-5 во многих случаях проблематичны. С другой стороны, поскольку ваше разнообразие с отрицательной стороны велико, взятие равных размеров также может оказаться не оптимальным. Таким образом, я бы предложил использовать что-то вроде 338 положительных примеров и около 1000-1200 случайных отрицательных примеров с весами.
  3. Немного отклонившись от вашего вопроса, я бы рассмотрел и другие типы классификации. Для начала я бы посоветовал подумать о knn .

Надеюсь, это поможет:)

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