2017-03-07 88 views
0

我是R中的统计和数据分析的新手 今天我在R中尝试朴素贝叶斯算法 我面临的问题是我无法理解预测。 该代码后面是这样的:R的朴素贝叶斯算法的输出说明

install.packages('ElemStatLearn')
library('ElemStatLearn')

library("klaR") library("caret")

sub = sample(nrow(spam), floor(nrow(spam) * 0.9)) 

train = spam[sub,]

test = spam[-sub,]

xTrain = train[,-58] 

yTrain = train$spam

xTest = test[,-58] 

yTest = test$spam

model = train(xTrain,yTrain,'nb',trControl=trainControl(method='cv',number=10)) 
prop.table(table(predict(model$finalModel,xTest)$class,yTest))` 

结果显示这里是如下:

yTest 
      email  spam 
    email 0.33405640 0.02603037 
    spam 0.24945770 0.39045553 

可以参考此链接查看http://joshwalters.com/2012/11/27/naive-bayes-classification-in-r.html

回答

0

这不是朴素贝叶斯模型的输出。

一旦你使用预测,你并不真正“关心”模型,因为你已经获得了预测。

table.prop创建每个组合的比例为整个人口。您可能需要考虑查看没有比例部分的表格,以查看实际数字

例如,33.4%将被检测为电子邮件,实际上是一封电子邮件,而2.6%将被检测为电子邮件,而他们是其实是垃圾邮

+0

好吧,明白了,朴素贝叶斯模型输出存储在模型数据框中。但那么kappa的含义和准确性是什么。 @Shahar Bental – Tappy

+0

你可以分享kappa的代码和输出以及准确性吗? 精度被很好地定义, https://en.wikipedia.org/wiki/Accuracy_and_precision Cohen的κ是“归一化”的精度的一种形式: https://en.wikipedia.org/wiki/Cohen's_kappa –

+0

上面写的是我的代码,而朴素贝叶斯 4140个样本 57预测 2类:“邮件”,“垃圾邮件” 没有预先处理 重采样:交叉验证(10倍) 摘要样本量:3726 3726,3727,3727,3725,3725,... 跨调谐参数的重采样结果: usekernel准确度Kappa FALSE 0.7126367 0.4581488 TRUE 0.5599037 0.2290060 – Tappy

0

您显示的结果称为“混淆矩阵”。它用于验证分类器的工作情况。

您需要了解这里的几个方面: - 真阳性(TP),假阳性(FP),真阴性(TN),假阴性(FN)

比较:

enter image description here

与你的情况

enter image description here

从左上到右下的斜线给出正确预测的百分比年龄,另外两个值表示分类器得到“困惑”的百分比年龄

希望这给出了一个初步的想法。 谷歌混淆矩阵,你可以找到更多。 一个很好的链接在这里:https://classeval.wordpress.com/introduction/basic-evaluation-measures/

+0

非常感谢你:) – Tappy