-
Notifications
You must be signed in to change notification settings - Fork 7
SVM
- классификатор, чей алгоритма описан тут (http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BE%D0%BF%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2)
Рассматриваем две задачи классификации: положительные твиты против остальных и отрицательные против остальных.
Из заранее размеченной выборка (размером 999, совершенно случайно) выбрасываются все признаки с нулевым вкладом. После чего, она делится случайным образом на тренировочную и тестовую (70% и 30% от исходной выборки соответственно).
Далее, происходит обучение SVM на тренировочной выборке и проверка на тестовой. Рассматриваются классы: “1” (положительные, либо отрицательные твиты) и “0” (все остальные).
Критерием качества выступает уже знакомые нам precision, recall и F-measure.
SVM в своем алгоритме руководствуется единственной характеристикой: долей неправильно классифицированных объектов. Учитывая специфику наших данных (соотношение нейтральных и положительных/отрицательных твитов ~ 9:1), даже в случае “тупого” классификатора, который всегда относит твит к “0”, ошибка будет вполне приемлема ~ 0.1. Именно такой результат и получается, если использовать “чистый” SVM, без дополнительных параметров.
Рассмотрим одни из возможных дополнительных параметров
- Вес класса - “важность” класса, учитываемый в ходе подсчета ошибки классификатора, это самый интересный для нас параметр - он может уравновесить дисбаланс между количеством представителей класса “0” и “1”.
- Параметр кросс-валидации k— выборка на которой строится класссификатор разбивается на k частей, после чего классификатор строится на совокупности каждых их k-1 и проверяется на оставшейся (а на основе построенных классификаторов строится один). Оновная его цель - обеспечить устойчивость классификатора, а следовательно и его результатов.
Вес классов можно выбрать исходя из соотношения их размеров, а можно воспользоваться F-measure. Используем второй вариант: для нахождения оптимальных значений весов будем использовалась оптимизацию значения F-measure на тренировочной выборке по параметрам — весам.
Классы | Параметры | Выборка | Precision | Recall | F-measure |
---|---|---|---|---|---|
positive&others | “1”.weight = 19; “0”.weigh = 1; cross-valid = 4; | тренировочная | 0.383 | 0.733 | 0.502 |
positive&others | “1”.weight = 19; “0”.weigh = 1; cross-valid = 4; | тестовая | 0.186 | 0.25 | 0.213 |
negative&others | “1”.weight = 19; “0”.weigh = 1; cross-valid = 4; | тренировочная | 0.3 | 0.811 | 0.438 |
negative&others | “1”.weight = 19; “0”.weigh = 1; cross-valid = 4; | тестовая | 0.126 | 0.312 | 0.18 |
Стоит отметить, что при оптимизации результат может получаться разным, если существует несколько локальных минимумов. Наш случай не исключение, возможны и иные результаты
Классы | Параметры | Выборка | Precision | Recall | F-measure |
---|---|---|---|---|---|
positive&others | “1”.weight = 3.2; “0”.weigh = 1; cross-valid = 4; | тренировочная | 0.775 | 0.517 | 0.62 |
positive&others | “1”.weight = 3.2; “0”.weigh = 1; cross-valid = 4; | тестовая | 0.231 | 0.094 | 0.133 |
negative&others | “1”.weight = 4.2; “0”.weigh = 1; cross-valid = 4; | тренировочная | 0.526 | 0.554 | 0.539 |
negative&others | “1”.weight = 4.2; “0”.weigh = 1; cross-valid = 4; | тестовая | 0.095 | 0.062 | 0.075 |