Подтвердить что ты не робот

Смешивание категориальных и непрерывных данных в классификаторе Naive Bayes с использованием scikit-learn

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

4b9b3361

Ответ 1

У вас есть как минимум два варианта:

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

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

Ответ 2

Ответ прост: умножьте результат !! это то же самое.

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

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

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

Ответ 3

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

https://github.com/remykarem/mixed-naive-bayes

Библиотека написана так, что API-интерфейсы похожи на scikit-learn.

В приведенном ниже примере предположим, что первые 2 объекта относятся к категориальному распределению, а последние 2 - гауссовским. В методе fit() просто укажите categorical_features=[0,1], указывая, что столбцы 0 и 1 должны следовать категориальному распределению.

from mixed_naive_bayes import MixedNB
X = [[0, 0, 180.9, 75.0],
     [1, 1, 165.2, 61.5],
     [2, 1, 166.3, 60.3],
     [1, 1, 173.0, 68.2],
     [0, 2, 178.4, 71.0]]
y = [0, 0, 1, 1, 0]
clf = MixedNB(categorical_features=[0,1])
clf.fit(X,y)
clf.predict(X)

Пипс устанавливается через pip install mixed-naive-bayes. Больше информации об использовании в файле README.md. Потяните запросы с благодарностью :)