Номинально хорошая проблема, но я уверен, что это происходит потому, что происходит что-то смешное...
В качестве контекста я работаю над проблемой в области выражения лица/распознавания, поэтому получение 100% -ной точности кажется невероятно невероятным (не то, чтобы это было правдоподобно в большинстве приложений...). Я предполагаю, что в наборе данных есть либо последовательное смещение, что это делает его слишком простым для SVM, чтобы вытащить ответ, = или =, скорее, я сделал что-то не так на стороне SVM.
Я ищу предложения, чтобы помочь понять, что происходит - это я (= мое использование LibSVM)? Или это данные?
Подробности:
- О ~ 2500 помеченных векторах данных/экземплярах (преобразованные видеокадры отдельных лиц - < 20 индивидуальных лиц), проблема двоичной классификации. ~ 900 функций/экземпляров. Несбалансированные данные устанавливаются примерно в соотношении 1: 4.
- Ran subset.py для разделения данных на тест (500 экземпляров) и тренировки (остальные).
- Ran "svm-train -t 0". (Примечание: по-видимому, нет необходимости в '-w1 1 -w-1 4'...)
- Ran svm-pred в тестовом файле. Точность = 100%!
Проверенные вещи:
- Проверено примерно в 10 раз по сравнению с тем, что я не тренируюсь и не тестирую те же файлы данных, через некоторую непреднамеренную ошибку аргумента командной строки
- повторно запустил subset.py(даже с -s 1) несколько раз и выполнил/испытал только несколько разных наборов данных (в случае случайности я на самом магическом поезде/тесте pa
- провела простую проверку типа diff, чтобы подтвердить, что тестовый файл не является подмножеством данных обучения.
- svm-scale по данным не влияет на точность (точность = 100%). (Хотя число опорных векторов действительно падает с nSV = 127, bSV = 64 на nBSV = 72, bSV = 0.)
- ((странно)) с использованием ядра RBF по умолчанию (вице-линейный, т.е. удаление "-t 0" ) приводит к тому, что точность становится мусором (?!)
- (проверка работоспособности), выполняющая svm-pred, используя модель, подготовленную по масштабированному набору данных против немасштабированного набора данных, приводит к точности = 80% (т.е. всегда угадывает доминирующий класс). Это строго проверка здравомыслия, чтобы убедиться, что каким-то образом svm-predict номинально действует прямо на моей машине.
Предварительное заключение?:
Что-то с данными обмануто - так или иначе, внутри набора данных есть тонкий, экспериментальный эффект, который SVM набирает.
(Это не означает, в первую очередь, объяснить, почему ядро RBF дает результаты мусора.)
Был бы очень признателен за любые предложения по: а) как исправить мое использование LibSVM (если это на самом деле проблема) или b) определить, какой тонкий экспериментальный смещение в данных LibSVM набирает обороты.