我很难理解A)naiveBayes的输出和B)naiveBayes的predict()函数。

这不是我的数据,但是这里有一个有趣的示例,说明我正在尝试执行的操作以及出现的错误:

require(RTextTools)
require(useful)

script <- data.frame(lines=c("Rufus, Brint, and Meekus were like brothers to me. And when I say brother, I don't mean, like, an actual brother, but I mean it like the way black people use it. Which is more meaningful I think","If there is anything that this horrible tragedy can teach us, it's that a male model's life is a precious, precious commodity. Just because we have chiseled abs and stunning features, it doesn't mean that we too can't not die in a freak gasoline fight accident",
                         "Why do you hate models, Matilda","What is this? A center for ants? How can we be expected to teach children to learn how to read... if they can't even fit inside the building?","Look, I think I know what this is about and I'm complimented but not interested.",
                         "Hi Derek! My name's Little Cletus and I'm here to tell you a few things about child labor laws, ok? They're silly and outdated. Why back in the 30s, children as young as five could work as they pleased; from textile factories to iron smelts. Yippee! Hurray!","Todd, are you not aware that I get farty and bloated with a foamy latte?","Oh, I'm sorry, did my pin get in the way of your ass? Do me a favor and lose five pounds immediately or get out of my building like now!",
                         "It's that damn Hansel! He's so hot right now!","Obey my dog!",
                         "I hear words like beauty and handsomness and incredibly chiseled features and for me that's like a vanity of self absorption that I try to steer clear of.","Yeah, you're cool to hide here, but first me and him got to straighten some shit out.",
                         "I wasn't like every other kid, you know, who dreams about being an astronaut, I was always more interested in what bark was made out of on a tree. Richard Gere's a real hero of mine. Sting. Sting would be another person who's a hero. The music he's created over the years, I don't really listen to it, but the fact that he's making it, I respect that. I care desperately about what I do. Do I know what product I'm selling? No. Do I know what I'm doing today? No. But I'm here, and I'm gonna give it my best shot.","I totally agree with you. But how do you feel about male models?",
                         "So I'm rappelling down Mount Vesuvius when suddenly I slip, and I start to fall. Just falling, ahh ahh, I'll never forget the terror. When suddenly I realize Holy shit, Hansel, haven't you been smoking Peyote for six straight days, and couldn't some of this maybe be in your head?"))

people <- as.factor(c("Zoolander","Zoolander","Zoolander","Zoolander","Zoolander",
                         "Mugatu","Mugatu","Mugatu","Mugatu","Mugatu",
                         "Hansel","Hansel","Hansel","Hansel","Hansel"))

script.doc.matrix <- create_matrix(script$lines,language = "english",removeNumbers=TRUE, removeStopwords = TRUE, stemWords=FALSE)
script.matrix <- as.matrix(script.doc.matrix)

nb.script <- naiveBayes(script.matrix,people)

nb.predict <- predict(nb.script,script$lines)
nb.predict


我的问题:

A)naiveBayes输出:

当我跑步

nb.script$tables


我得到这样的表:

$young
           young
people      [,1]   [,2]
  Hansel     0.0 0.0000000
  Mugatu     0.2 0.4472136
  Zoolander  0.0 0.0000000


我该怎么解释呢???我以为这些应该是概率,但是我不明白[,1]和[,2]的含义。另外,这些表中显示的概率是否不应该相加为1.0?他们为什么不呢?如果有第三列,那应该有意义吗?

我应该在type=raw中使用naiveBayes()吗?

B)naiveBayes的predict():

输出给我Hansel作为每个条目的预测。我相信这仅仅是因为按字母顺序是一流的。在我的预测的其他实例中,如果Hansel的排名是4x,Mugatu的6x和Zoolander是5x,则因为每个类条目的列出次数最多,因为对每个条目的预测都最终给了我Mugatu作为对每个条目的预测。

编辑:对于我的问题...我怎样才能得到预测以给我一个实际的预测?

预测的输出如下:


  “> nb.predict
  
  [1] Hansel Hansel Hansel Hansel Hansel Hansel Hansel Hansel Hansel Hansel Hansel Hansel Hansel
  [12] Hansel Hansel Hansel Hansel
  
  
    级别:汉塞尔·穆加图动物园
  


这是一个类似问题的链接:R: Naives Bayes classifier bases decision only on a-priori probabilities
但是答案并没有真正帮助我太多。

提前致谢!

最佳答案

对于问题的第一部分,矩阵script.matrix的列为数字。 naiveBayes将数字输入解释为来自高斯分布的连续数据。您在答案中看到的表格给出了因子类别中这些数字变量的样本均值(第1列)和标准差(第2列)。

您可能想要的是让naiveBayes认识到您的输入变量是指标。一种简单的方法是将整个script.matrix转换为字符矩阵:

# Convert columns to characters
script.matrix <- apply(as.matrix(script.doc.matrix),2,as.character)


通过此更改:

> nb.predict <- predict(nb.script,script$lines)
> nb.script$tables$young
           young
people        0   1
  Hansel    1.0 0.0
  Mugatu    0.8 0.2
  Zoolander 1.0 0.0


要查看预测的类:

> nb.predict <- predict(nb.script, script.matrix)
> nb.predict
 [1] Zoolander Zoolander Zoolander Zoolander Zoolander Mugatu    Mugatu
 [8] Mugatu    Mugatu    Mugatu    Hansel    Hansel    Hansel    Hansel
[15] Hansel
Levels: Hansel Mugatu Zoolander


要查看naiveBayes拟合的原始概率,请执行以下操作:

predict(nb.script, script.matrix, type='raw')

关于r - 使用单词矩阵和3+类进行预测的naiveBayes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20048603/

10-10 10:08