Номинально хорошая проблема, но я почти уверен, что это потому, что происходит что-то забавное ...
Что касается контекста, я работаю над проблемой в области выражения лица / распознавания, поэтому получение 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) несколько раз и обучал / тестировал только несколько разных наборов данных (на случай, если я случайно выбрал самый волшебный поезд / тест
- выполнила простую проверку, похожую на различную, чтобы убедиться, что тестовый файл не является подмножеством обучающих данных
- svm-scale данных не влияет на точность (точность = 100%). (Хотя количество опорных векторов действительно снижается с nSV = 127, bSV = 64 до nBSV = 72, bSV = 0.)
- ((странно)) с использованием ядра RBF по умолчанию (вице-линейный - т.е. удаление '-t 0') приводит к точности, идущей в мусор (?!)
- (проверка работоспособности) запуск svm-pred с использованием модели, обученной на масштабированном наборе данных по сравнению с немасштабированным набором данных, приводит к точности = 80% (то есть всегда угадывает доминирующий класс). Это строго проверка работоспособности, чтобы убедиться, что каким-то образом svm-pred номинально работает правильно на моей машине.
Предварительный вывод ?:
Что-то с данными не в порядке - каким-то образом в наборе данных есть тонкий, управляемый экспериментатором эффект, который улавливает SVM.
(Однако при первом проходе это не объясняет, почему ядро RBF выдает мусор.)
Был бы очень признателен за любые предложения по а) как исправить мое использование LibSVM (если это действительно проблема) или б) определить, какой тонкий экспериментатор-предвзятость в данных, которые улавливает LibSVM.