2 votos

Necesito ayuda con algunas clasificaciones sorprendentes de naiveBayes

Estamos tratando de hacer un POC sobre el uso de NaiveBayes para clasificar un establecimiento por categoría.

Cargamos el siguiente conjunto de entrenamiento en R.

NAME_1,NAME_2,CHANNEL_5
Vanilla,Bar,Bar &  Grill
Zen,Bar,Bar &  Grill
cafe,havana,Bar &  Grill
cafe,hollywood,Bar &  Grill
monaco,grill,Bar &  Grill
grill,grill,Bar &  Grill
hunai,asian,Bar &  Grill
Apple,Institute,School
devry,Institute,School
usu,College,School
suny,university,School
fashion,school,School
theater,study,School
Burger,King,Hamburger
Mighty,Burger,Hamburger
one,Burger,Hamburger
wendy,sandwich,Hamburger
Burger,Heaven,Hamburger
Burgler,Burger,Hamburger  

Las columnas 1 y 2 contienen el nombre del establecimiento. La columna 3 es la clase.

library(e1071);

new_training_data <- read.table("C:/Users/test/08_jul_13_training.txt",
header=TRUE , sep="\t");

 model1<-naiveBayes(new_training_data[,1:2],new_training_data[,3],laplace
 =2);

test_data <- read.table("C:/Users/test/test1.txt", header=TRUE , sep="\t");

predict(model1, test_data[,1:2],type = c("class","raw"));

A continuación se muestra el conjunto de pruebas con la categoría esperada y el resultado real del clasificador NaiveBayes.

NAME_1,NAME_2,Expected_category,Actual_Result_from_Naive_bayes
my,Bar,Bar &  Grill, Bar &  Grill 
cafe,milano,Bar &  Grill, Hamburger
Teaching,Institute,School, Bar &  Grill
devry,Institute,School, Bar &  Grill
beauty,school,School, Bar &  Grill
fashion,school,School, Bar &  Grill
theater,school,School, Bar &  Grill 
Burger,Baja,Hamburger, Hamburger   
Burger,Big,Hamburger, Hamburger 
Pepsi,Cola,Hamburger, Bar &  Grill
Burger,Supreme,Hamburger, Hamburger 
Burger,King,Hamburger, Hamburger

my bar se clasifica correctamente como Bar & grill . Sin embargo Cafe Milano se clasifica como Hamburger en lugar de Bar & Grill . estadísticamente hablando, la probabilidad de Bar en my Bar no es diferente de Cafe en Cafe Milano . ¿Algún consejo sobre cómo NaiveBayes estos resultados será muy apreciada.

3voto

Ankur Loriya Puntos 160

Creo que esto está relacionado con los factores, que son un tipo de datos en R que a menudo se comportan de forma inesperada.

No tengo tus datos de prueba, pero cuando utilizas el clasificador para predecir a partir de un nuevo punto de datos, tienes que asegurarte de que los posibles niveles de NAME_1 y NAME_2 son exactamente los niveles que aparecen en los datos de entrenamiento. Si los datos de entrenamiento y de prueba proceden de archivos de texto diferentes, es muy poco probable que esto ocurra.

Tus tres primeras líneas de código me funcionan bien.

Supongamos que desea clasificar un único punto de datos nuevo con NAME_1 = n1 y NAME_2 = n2 . He aquí cómo podría hacerlo.

    pred <- function(model, n1, n2, type){
      n1 <- factor(n1, levels = levels(new_training_data[,1])) 
      n2 <- factor(n2, levels = levels(new_training_data[,2]))
      predict(model, data.frame(NAME_1 = n1, NAME_2 = n2), type)      
   }

Ahora debería funcionar con tu modelo. Los siguientes se comportan para mí como se esperaba:

pred(model1, "Teaching", "Institute", "class")
pred(model1, "cafe", "milano", "class")
pred(model1, "beauty", "school", "class")

Esto se podría ampliar a los marcos de datos para poder clasificar todos los datos de prueba a la vez. Espero que le sirva de ayuda.

0voto

Annette Puntos 11

Me parece que estás haciendo un bayes ingenuo multinomial. Si miras el componente tablas del objeto modelo, deberías (según la documentación) ver tablas de probabilidades condicionales dada la clase objetivo.

¿Cuántas clases intenta predecir? ¿Has probado con 1-3 gramos en las palabras entrantes? Parece que está utilizando hasta dos 1-gramo; ¿es correcto?

Además, por favor, pon tus datos en tablas para que podamos ver qué texto va en cada columna.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X