Реализовать дополнительный наивный байесовский в python?

9

проблема

Я пытался использовать наивный байесовский код на помеченном наборе данных о преступности, но получил очень плохие результаты (точность 7%). Наивный Байес работает намного быстрее, чем другие алгоритмы, которые я использовал, поэтому я хотел попытаться выяснить, почему счет был таким низким.

Исследование

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

Проведя некоторые исследования, я смог найти реализацию на Java, но, к сожалению, я не знаю никакой Java и просто не понимаю алгоритм достаточно хорошо, чтобы реализовать себя.

Вопрос

где я могу найти реализацию в Python? Если этого не существует, как я должен сам осуществить это?

кузнечик
источник

Ответы:

5

Наивный Байес должен уметь обрабатывать несбалансированные наборы данных. Напомним, что формула Байеса

п(Y|Икс)знак равноп(Икс|Y)п(Y)п(Икс)αп(Икс|Y)п(Y)

п(Икс|Y)п(Y)п(Y)

В вашем случае, может быть, вы одеваетесь и нуждаетесь в сглаживании? Вы можете начать с +1 сглаживания и посмотреть, дает ли он какие-либо улучшения. В python при использовании numpy я бы реализовал сглаживание следующим образом:

table = # counts for each feature 
PT = (table + 1) / (table + 1).sum(axis=1, keepdims=1)

Обратите внимание, что это дает вам многозначный наивный байесовский - который применяется только к категориальным данным.

Я также могу предложить следующую ссылку: http://www.itshared.org/2015/03/naive-bayes-on-apache-flink.html . Речь идет о реализации Наивного Байеса на Apache Flink. Хотя это Java, возможно, это даст вам некоторую теорию, вам нужно лучше понять алгоритм.

Алексей Григорьев
источник
Вы можете быть правы, похоже, что наивный Байес имеет только проблему дисбаланса с классификацией текста. Можете ли вы объяснить, что такое сглаживание?
кузнечик
п(Икс|Y)Икс
0

Моя реализация Complement Naive Bayes в scikit-learn может быть найдена здесь .

airalcorn2
источник