Un classificateur bayésien est-il une bonne approche pour le texte avec des métadonnées numériques?

8

J'essaie de trouver une approche pour détecter les publicités frauduleuses sur mon site Web. Je pense que le problème a beaucoup en commun avec la détection des e-mails de spam (pour lesquels un classificateur bayésien naïf est une solution courante) car de nombreux signaux indiquant une arnaque seront trouvés dans le texte de l'annonce.

Cependant, il existe certaines autres informations qui peuvent être de bons indicateurs d'arnaque, mais je ne sais pas si / comment un classificateur Bayes pourrait les utiliser, car elles impliquent des valeurs numériques (avec des valeurs aux extrêmes de la plage suspectes) plutôt que de simples valeurs binaires correspondant à la présence ou à l’absence d’un mot dans le texte.

Par exemple, pour de nombreuses publicités frauduleuses, le prix de l'article est très bas (pour attirer beaucoup de vues), donc j'aimerais qu'un prix inférieur à la normale soit un indicateur fort que l'annonce peut être une arnaque.

Est-ce que Bayes répond toujours bien à mes exigences, sinon pourriez-vous recommander une approche différente?

codebox
la source

Réponses:

9

Bien sûr, vous pouvez utiliser Naive Bayes. Il vous suffit de spécifier la forme de la distribution conditionnelle.

Je peux penser à quelques options:

  1. Distribution binaire: binarisez vos données à l'aide d'un seuil, et vous revenez au problème que vous résolviez déjà.
  2. Distribution paramétrique: S'il existe une distribution paramétrique raisonnable, par exemple gaussienne, vous pouvez l'utiliser.
  3. Distribution non paramétrique: Décidez des casiers pour les données numériques et utilisez-les pour construire une distribution empirique non paramétrique.
Au niveau du bit
la source
7

Les classificateurs Naive Bayes peuvent accueillir des variables numériques ainsi que des variables discrètes sans trop de problème. Il existe essentiellement trois approches: (i) discrétiser les valeurs numériques (ii) utiliser un modèle paramétrique de chaque attribut numérique (par exemple gaussien) ou (iii) utiliser un estimateur de densité non paramétrique (par exemple Parzen) pour chaque attribut numérique.

voir par exemple "Les classificateurs Naive Bayes qui fonctionnent bien avec des variables continues" par Remco Bouckaert

Dikran Marsupial
la source
1
@LOL même réponse que la mienne avec le même ordre de choix et les mêmes exemples ... hah quelles sont les chances? Je suppose que nous pensons tous de la même façon
Bitwise
1
Clairement, je n'aurais pas dû passer cinq minutes à retrouver la référence; o)
Dikran Marsupial
3

Les Bayes naïfs peuvent certainement travailler avec des attributs numériques aussi bien qu'avec des attributs discrets (préoccupations modulo quant à la pertinence de la distribution supposée comme mentionné dans d'autres réponses). Cependant, vous devez vous demander si vous voulez vraiment utiliser Naive Bayes, car la méthodologie non discriminante se décomposera de plus en plus lorsque vous combinerez des données de diverses sources, avec des corrélations potentiellement fortes.

Si vous souhaitez conserver une interprétation probabiliste, considérez la régression logistique, qui est un analogue exact de Naive Bayes avec un objectif discriminatoire plutôt que génératif (voir cet article par exemple: Régression logistique contre Naive Bayes . Vous pouvez en trouver diverses implémentations: I comme Mallet , si vous pouvez utiliser java (accessible comme un outil de ligne de commande ou une API).

Si une interprétation probabiliste stricte n'est pas nécessaire, vous pouvez utiliser un SVM. Il existe de nombreuses implémentations de cela, mais le standard de facto (avec une variante disponible dans la plupart des langues) est LibSVM .

Ben Allison
la source
1

Vous pouvez utiliser des valeurs numériques assez facilement. Dans le terme P (Feature | scam = Yes), vous pouvez mettre une distribution gaussienne ou toute autre distribution empirique à partir des données d'apprentissage (par exemple, trier les données, créer une fonction qui renvoie le centile de la valeur numérique d'entrée donnée). Voici un article décrivant que

brocoli
la source