web-dev-qa-db-fra.com

Mélange de données catégoriques et continues dans le classificateur Naive Bayes à l'aide de scikit-learn

J'utilise scikit-learn dans Python pour développer un algorithme de classification pour prédire le sexe de certains clients. Entre autres, je veux utiliser le classificateur Naive Bayes mais mon problème est que j'ai un mélange de données catégorielles (ex: "Enregistré en ligne", "Accepte les notifications par e-mail", etc.) et de données continues (ex: "Âge", "Durée de l'adhésion", etc.). Je n'ai pas beaucoup utilisé scikit auparavant, mais je suppose que cela Gaussian Naive Bayes convient aux données continues et que Bernoulli Naive Bayes peut être utilisé pour les données catégorielles. Cependant, puisque je veux avoir les deux données catégoriques et continues dans mon modèle, je ne sais pas vraiment comment pour gérer cela. Toutes les idées seraient très appréciées!

49
user1499144

Vous avez au moins deux options:

  • Transformez toutes vos données en une représentation catégorielle en calculant les centiles pour chaque variable continue, puis en regroupant les variables continues en utilisant les centiles comme limites de bac. Par exemple, pour la taille d'une personne, créez les bacs suivants: "très petit", "petit", "régulier", "grand", "très grand" en vous assurant que chaque bac contient environ 20% de la population de votre ensemble d'entraînement. Nous n'avons aucun utilitaire pour effectuer cela automatiquement dans scikit-learn mais cela ne devrait pas être trop compliqué de le faire vous-même. Ajustez ensuite un multinomial unique NB sur ces représentations catégoriques de vos données.

  • Ajuster indépendamment un modèle gaussien NB sur la partie continue des données et un modèle multinomial NB sur la partie catégorielle. Transformez ensuite l'ensemble des données en prenant la classe probabilités d'affectation (avec la méthode predict_proba) en tant que nouvelles fonctionnalités: np.hstack((multinomial_probas, gaussian_probas)) puis réaménager un nouveau modèle (par exemple un nouveau NB gaussien) sur les nouvelles fonctionnalités.

45
ogrisel

La réponse simple: multipliez le résultat !! c'est le même.

Naive Bayes basé sur l'application du théorème de Bayes avec l'hypothèse "naïve" d'indépendance entre chaque paire de caractéristiques - ce qui signifie que vous calculez la probabilité de Bayes en fonction d'une caractéristique spécifique sans tenir les autres - ce qui signifie que l'algorithme multiplie chaque probabilité d'une caractéristique avec la probabilité de la deuxième caractéristique (et nous ignorons totalement le dénominateur - car il ne s'agit que d'un normalisateur).

donc la bonne réponse est:

  1. calculer la probabilité à partir des variables catégorielles.
  2. calculer la probabilité à partir des variables continues.
  3. multipliez 1. et 2.
8
Yaron