Номинально хорошая проблема иметь, но я почти уверен, что это потому, что 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.
задан severian 23 August 2011 в 00:21
поделиться