Я новичок в машинном обучении. В настоящее время я использую классификатор Наивного Байеса (NB), чтобы классифицировать небольшие тексты в 3 классах как положительные, отрицательные или нейтральные, используя NLTK и python.
Проведя несколько тестов с набором данных, состоящим из 300 000 экземпляров (16 924 положительных, 7 477 отрицательных и 275 599 нейтральных), я обнаружил, что при увеличении количества признаков точность снижается, но повышается точность / отзыв для положительных и отрицательных классов. это нормальное поведение для классификатора NB? Можно ли сказать, что было бы лучше использовать больше функций?
Некоторые данные:
Features: 50
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596
Features: 500
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942
Заранее спасибо...
Изменить 2011/11/26
Я протестировал 3 разные стратегии выбора функций (MAXFREQ, FREQENT, MAXINFOGAIN) с классификатором Наивного Байеса. Сначала вот Точность и F1 Измерения на класс:
Затем я составил график ошибки поезда и ошибки теста с помощью набора инкрементальных тренировок при использовании MAXINFOGAIN с функциями 100 лучших и 1000 лучших объектов:
Итак, мне кажется, что, хотя FREQENT достигает наивысшей точности, лучшим классификатором является тот, который использует MAXINFOGAIN, верно ли это? ? При использовании 100 лучших функций у нас есть предвзятость (ошибка теста близка к ошибке поезда), и добавление дополнительных примеров обучения не поможет. Чтобы улучшить это, нам нужно больше возможностей. С 1000 функций смещение уменьшается, но ошибка увеличивается ... Это нормально? Должен ли я добавить больше функций? Я действительно не знаю, как это интерпретировать ...
Еще раз спасибо...
источник
Ответы:
Точность против F-меры
Прежде всего, когда вы используете метрику, вы должны знать, как ее использовать. Точность измеряет соотношение правильно классифицированных экземпляров по всем классам. Это означает, что если один класс встречается чаще, чем другой, то в результирующей точности явно преобладает точность доминирующего класса. В вашем случае, если построить Модель M, которая просто предсказывает «нейтральный» для каждого случая, результирующая точность будет
Хорошо, но бесполезно.
Таким образом, добавление функций явно улучшило способность NB дифференцировать классы, но предсказывая «положительный» и «отрицательный», мы неправильно классифицируем нейтральные значения, и, следовательно, точность снижается (грубо говоря). Это поведение не зависит от NB.
Больше или меньше возможностей?
В общем, лучше использовать не больше функций, а правильные функции. Чем больше функций, тем лучше, поскольку алгоритм выбора функций имеет больше возможностей для поиска оптимального подмножества (я предлагаю изучить: выбор функций перекрестной проверки ). Когда дело доходит до NB, быстрый и надежный (но не оптимальный) подход заключается в использовании InformationGain (Ratio) для сортировки объектов в порядке убывания и выбора верхнего k.
Опять же, этот совет (кроме InformationGain) не зависит от алгоритма классификации.
РЕДАКТИРОВАТЬ 27.11.11
Было много путаницы в отношении смещения и дисперсии, чтобы выбрать правильное количество функций. Поэтому я рекомендую прочитать первые страницы этого урока: компромисс Bias-Variance . Ключевая сущность:
Графики обучения, нанесенные на график, действительно указывают на смещение, так как на графике изображена ошибка. Однако то, что вы не видите это дисперсию, так как доверительный интервал ошибки не отображается вообще.
Пример: при выполнении трехкратной перекрестной проверки 6 раз (да, рекомендуется повторение с различным разделением данных, Кохави предлагает 6 повторений), вы получаете 18 значений. Я бы сейчас ожидал, что ...
Такое поведение ошибки / смещения именно то, что мы видим на ваших графиках. Мы не можем сделать заявление о дисперсии. То, что кривые расположены близко друг к другу, может указывать на то, что набор тестов достаточно большой, чтобы показать те же характеристики, что и тренировочный набор, и, следовательно, что измеренная ошибка может быть надежной, но это так (по крайней мере, насколько я понял это) недостаточно сделать заявление о дисперсии (об ошибке!).
Добавляя все больше и больше обучающих примеров (сохраняя размер набора тестов фиксированным), я ожидаю, что дисперсия обоих подходов (небольшое и большое количество функций) уменьшится.
Да, и не забудьте рассчитать информационную базу для выбора функции, используя только данные из обучающей выборки! Можно использовать полные данные для выбора признаков, а затем выполнить разбиение данных и применить перекрестную проверку, но это приведет к переобучению. Я не знаю, что вы сделали, это просто предупреждение, которое никогда не следует забывать.
источник
Чтобы узнать, полезно ли использовать больше функций, я бы построил кривые обучения. Я думаю , что это, очевидно , объясняется в 10 - й группы , класса машины обучения Стэнфорда, названный «Консультировать для применения машинного обучения», которые вы можете найти здесь: http://www.ml-class.org/course/video/preview_list .
Составляя кривые обучения, вы можете понять, является ли ваша проблема большим отклонением или большим отклонением. Пока вы увеличиваете количество обучающих примеров, вы должны составлять график ошибок обучения и ошибок теста. (т. Е. 1-точность), последняя является ошибкой вашего классификатора, оцененной по другому набору данных. Если эти кривые близки друг к другу, у вас есть проблема с большим смещением, и, вероятно, было бы полезно добавить больше функций. С другой стороны, если ваши кривые достаточно разделены, пока вы увеличиваете количество обучающих примеров, у вас возникает проблема высокой дисперсии. В этом случае вам следует уменьшить количество используемых вами функций.
редактировать
источник