На скольких документах тренироваться для наивного байеса?

Я только что создал свою собственную наивную байесовскую модель с нуля и обучил ее на 776 документах. Я попытался классифицировать документы, но он неправильно классифицировал документы во всех трех тестовых документах. Категория, которой он должен был быть, даже имела самую низкую из всех вероятностей по отношению к другим категориям (это для двух из трех тестовых документов).

Должен ли я увеличить количество учебных документов? Я не думаю, что это мой код, потому что я проверил вычисление, но я не знаю, может быть, функция calculate_numerators как-то неверна?? Для части числителя я использовал журналы из-за проблемы недополнения и суммировал вероятности терминов и вероятность (число_документов_в_категории/общее_число_документов) http://i.stack.imgur.com/GIwIp.png

Очень смущен и обескуражен, так как это заняло у меня так много времени, и теперь я чувствую, что это было напрасно, потому что он даже не классифицировал правильно ОДИН документ :(

@ Боб Диллон, привет, спасибо за подробный ответ. мой самый большой вопрос из этого был то, что вы подразумеваете под отделимым. Вы имеете в виду, если есть четкое различие документов между классами? Я действительно не знаю, что на это ответить. Данные были классифицированы людьми, поэтому разделение возможно, но, может быть, оно настолько близко к другим типам категорий, что становится размытым? Может быть, компьютер не распознает разницу в используемых словах, которые классифицируются как одна вещь по сравнению с другой категорией? Я должен сохранить эти категории, я не могу изменить порядок категорий, они должны быть такими, какие они есть. Я не уверен, как создавать прототипы в R, разве мне не нужно было бы брать текстовые данные и запускать их? разве мне не нужно было бы создавать токенизацию и т. д.? Я собираюсь изучить получение информации и SVM. Я, вероятно, отпишусь. Спасибо!


comment
Ну с чем вы сравниваете, чтобы понять, что это неправильно? Плюс магическое число в статистике — 30. Пока у вас есть более 30 наблюдений, размер вашей выборки должен быть достаточно большим.   -  person FirebladeDan    schedule 06.08.2015
comment
Что ж, тестовый документ уже классифицирован, я просто хочу проверить, правильно ли он классифицирован. И сравниваю прогнозируемое с реальным. Да, у меня 776, так что определенно покрывает 30-ю базу, но, может быть, для классификации текста требуется гораздо больше??   -  person hope288    schedule 06.08.2015
comment
Так что не беспокойтесь о своем образце, вы хороши. Все равно непонятно, с каким двигателем вы сравниваете. Ваш обученный набор отличается от сделанного в R или Matlab. Я до сих пор не понимаю, откуда ты знаешь, что это неправильно.   -  person FirebladeDan    schedule 06.08.2015
comment
Цитата @FirebladeDan для магического числа в статистике 30? Это вообще не звучит правильно.   -  person IVlad    schedule 06.08.2015
comment
@IVlad - я приму эту цитату, поскольку ваши полномочия выше. Хороший входной сигнал   -  person FirebladeDan    schedule 06.08.2015
comment
Да, это то, что я имею в виду под отдельным. Если данные классифицируются людьми, я бы сосредоточился на уменьшении размерности. Люди отлично умеют игнорировать бесполезную информацию и сосредотачиваться на ценной информации. ML сбивает с толку бесполезная информация (шум, например, слово the), поэтому здесь очень помогает выбор функций.   -  person Bob Dillon    schedule 07.08.2015
comment
Вот инструмент, который я пробовал в R: rtexttools.com   -  person Bob Dillon    schedule 07.08.2015
comment
С ними легко начать работу: вы импортируете текстовые документы, а инструменты берутся оттуда. Но я нашел их сложными, чтобы получить результаты. Этот инструмент очень мощный и позволяет вам экспериментировать с различными методами машинного обучения, чтобы увидеть, какие из них дают наилучшие результаты для ваших данных.   -  person Bob Dillon    schedule 07.08.2015
comment
Хорошее введение в инструменты R: journal. r-project.org/archive/2013-1/   -  person Bob Dillon    schedule 07.08.2015
comment
Этот вопрос относится к Cross Validated.   -  person clickbait    schedule 10.07.2018


Ответы (2)


Я только что создал свою собственную наивную байесовскую модель с нуля и обучил ее на 776 документах.

Наивный байесовский алгоритм, как следует из его названия, является наивным алгоритмом. Это очень плохо по сравнению с современными методами, такими как машины опорных векторов или (глубокие) нейронные сети. Вы должны помнить об этом при его использовании: ожидайте лучших результатов, чем подбрасывание монеты, но не очень.

попытался классифицировать документы, но он неправильно классифицировал документы во всех трех тестовых документах.

Всего три тестовых документа? Это очень мало и ни о чем вам не говорит. Если у вас всего x документов, вам следует использовать как минимум 20% для тестирования. Также рассмотрите возможность использования перекрестной проверки.

Должен ли я увеличить количество учебных документов?

Это поможет, да. Золотое правило машинного обучения состоит в том, что чем больше данных, тем лучше алгоритм. Конечно, мы не всегда можем получить больше данных или не можем позволить себе вычислительную мощность для обработки большего количества данных, поэтому важны более совершенные алгоритмы.

Однако, чтобы увидеть улучшение, вам также потребуется использовать больше тестовых данных.

В заключение: протестируйте дополнительные данные. Если у вас есть 779 документов, используйте не менее 100 для тестирования или выполните перекрестную проверку. . Если вы получите точность выше 50-60%, будьте счастливы, этого достаточно для такого количества данных и наивного Байеса.

person IVlad    schedule 05.08.2015
comment
@lVlad, спасибо за ответ. Я увеличил количество тестов примерно до 400, но только 3 оказались правильными :( Я увеличиваю набор для обучения до 6000 и собираюсь использовать 1200 документов для набора для тестирования. Я также изучаю SVM, скоро обновлю. Еще раз спасибо! - person hope288; 06.08.2015

У вас многое работает против вас.

  1. Слабое снижение размерности — только фильтрация стоп-слов
  2. Мультиклассовая классификация
  3. Слабый классификатор
  4. Мало обучающих данных

Вы показываете нам код, который используете, но если данные неразделимы, то ничто их не отсортирует. Вы уверены, что данные можно засекретить? Если да, то какую производительность вы ожидаете?

Вы должны попробовать прототипировать свою систему, прежде чем переходить к реализации. Использование Octave, R или MatLab — хорошее место для начала. Убедитесь, что ваши данные являются разделимыми, а алгоритм эффективен для ваших данных. Другие предложили использовать SVM и нейронные сети, а не наивную байесовскую классификацию. Это хорошее предложение. Каждый требует небольшой настройки, чтобы получить максимальную производительность. Я использовал Google Prediction API в качестве первой проверки производительности, которую я могу ожидать от системы, а затем заменял его SVM или другим классификатором для оптимизации производительности и снижения затрат/задержек и т. д. Хорошо получить базовый уровень как можно быстрее и проще, прежде чем погружаться слишком глубоко.

Если данные являются разделимыми, чем больше помощи вы оказываете системе, тем лучше она будет работать. Уменьшение признаков/размерности удаляет шум и помогает классификатору работать хорошо. Существует статистический анализ, который вы можете сделать, чтобы уменьшить набор функций. Мне нравится получение информации, но есть и другие.

Я нашел эту статью хорошей теоретической трактовкой классификации текстов, включая снижение характеристик.

Я успешно использовал функцию получения информации для сокращения возможностей и обнаружил, что эта статья будет очень хорошим практическим руководством.

Что касается количества тренировочных данных, то здесь все не так однозначно. Как правило, чем больше, тем лучше, но качество данных также очень важно. Если данные нелегко отделить или базовое распределение вероятностей не похоже на ваш тест и дикие данные, производительность будет низкой даже с большим количеством данных. Иными словами, количество обучающих данных имеет значение, но не менее важно качество.

Удачи!

person Bob Dillon    schedule 06.08.2015