Справка - 100% точность с LibSVM?

Номинально хорошая проблема иметь, но я почти уверен, что это потому, что s происходит что-то забавное ...

В контексте, я работаю над проблемой в области выражения лица / распознавания, поэтому получение 100% точности кажется невероятно неправдоподобным (не то чтобы это было правдоподобно в большинстве приложений ... ). Я предполагаю, что либо в наборе данных присутствует некоторая систематическая ошибка, из-за которой SVM становится слишком легко получить ответ, = или =, что более вероятно, я сделал что-то не так со стороны SVM.

Я ищу предложения, которые помогут понять, что происходит - это я (= мое использование LibSVM)? Или это данные?

Подробности:

  • Около ~ 2500 помеченных векторов / экземпляров данных (преобразованные видеокадры отдельных лиц - всего <20 отдельных лиц), проблема бинарной классификации. ~ 900 функций / экземпляр. Несбалансированный набор данных с соотношением примерно 1: 4.
  • Выполнено subset.py для разделения данных на тест (500 экземпляров) и обучение (оставшиеся).
  • Выполнено «svm-train -t 0». (Примечание: очевидно, нет необходимости в '-w1 1 -w-1 4' ...)
  • Выполнить svm-predic для тестового файла. Точность = 100%!

Что пробовали:

  • Проверено около 10 раз, что я не тренируюсь и не тестирую одни и те же файлы данных, из-за некоторой непреднамеренной ошибки аргумента командной строки
  • повторно запустил subset.py (даже с -s 1) несколько раз и тренировал / тестировал только несколько разных наборов данных (на случай, если я случайно на самом волшебном тренировочном / тестовом pa
  • выполнил простую проверку, похожую на diff, чтобы подтвердить, что тестовый файл не подмножество обучающих данных
  • svm-scale данных не влияет на точность (точность = 100%) (хотя количество опорных векторов действительно падает с nSV = 127, bSV = 64 до nBSV = 72, bSV = 0.)
  • ((странно)) с использованием ядра RBF по умолчанию (вице-линейный - т.е. удаление '-t 0') приводит к точности перехода в мусор (?!)
  • (проверка работоспособности) при запуске svm -predict с использованием модели, обученной на масштабированном наборе данных по сравнению с немасштабированным набором данных, приводит к точности = 80% (т. е. всегда угадывает доминирующий класс). Это строго проверка работоспособности, чтобы убедиться, что svm-predic каким-то образом номинально действует р на моей машине.

Предварительный вывод?:

Что-то с данными не в порядке - каким-то образом в наборе данных есть тонкий, управляемый экспериментатором эффект, который улавливает SVM.

(Однако при первом проходе это не объясняет, почему ядро ​​RBF выдает мусор.)

Буду очень признателен за любые предложения по а) как исправить мое использование LibSVM (если это действительно проблема ) или б) определить, какие тонкие экспериментальные предвзятости улавливает LibSVM.

13
задан severian 23 August 2011 в 00:21
поделиться