Смешивание категориальных и непрерывных данных в наивном байесовском классификаторе с помощью scikit-learn


Я использую scikit-learn в Python для разработки алгоритма классификации для прогнозирования пола определенных клиентов. Среди прочего, я хочу использовать наивный классификатор Байеса, но моя проблема заключается в том, что у меня есть смесь категориальных данных (например: "зарегистрирован онлайн", "принимает уведомления по электронной почте" и т. д.) и непрерывных данных (например: "возраст", "продолжительность членства" и т. д.). Я не часто использовал scikit раньше, но я полагаю, что гауссовский наивный Байес подходит для непрерывных данных, а Бернулли наивен Байес может использоваться для категориальных данных. Однако, поскольку я хочу иметь в своей модели как категориальные, так и непрерывные данные, я не знаю, как с этим справиться. Любые идеи будут высоко оценены!

2 34

2 ответа:

У вас есть по крайней мере два варианта:

  • Преобразуйте все ваши данные в категориальное представление, вычисляя процентили для каждой непрерывной переменной и затем связывая непрерывные переменные, используя процентили в качестве границ Бина. Например, для роста человека создайте следующие бункеры:" очень маленький"," маленький"," обычный"," большой"," очень большой", гарантируя, что каждый бункер содержит приблизительно 20% населения вашего тренировочного набора. У нас нет никакой полезности, чтобы выполните это автоматически в scikit-learn, но это не должно быть слишком сложно, чтобы сделать это самостоятельно. Затем установите уникальный мультиномиальный NB на эти категориальные представления ваших данных.

  • Самостоятельно соответствовать гауссовой модели NB на непрерывную часть данных и модель НБ полиномиальной о категорическом часть. Затем преобразуйте весь набор данных, взяв вероятности присвоения классов (с помощью метода predict_proba) в качестве новых функций: np.hstack((multinomial_probas, gaussian_probas)) , а затем обновите новую модель (например, новый гауссовский NB) о новых возможностях.

Простой ответ: умножьте результат!! это одно и то же.

Наивный Байес, основанный на применении теоремы Байеса с "наивным" предположением о независимости между каждой парой признаков-это означает, что вы вычисляете вероятность Байеса, зависящую от конкретного признака, не удерживая другие, - что означает, что алгоритм умножает каждую вероятность от одного признака на вероятность от второго признака (и мы полностью игнорируем знаменатель - поскольку это всего лишь функция). нормализатор).

Итак, правильный ответ:

    Вычислите вероятность по категориальным переменным. Вычислите вероятность из непрерывных переменных.
  1. умножьте на 1. и 2.