首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用naiveBayes预测类变量

使用naiveBayes预测类变量
EN

Stack Overflow用户
提问于 2015-06-29 15:40:44
回答 1查看 1.2K关注 0票数 1

我只是尝试在naiveBayes包中使用e1071函数。这是一个过程:

代码语言:javascript
复制
>library(e1071)
>data(iris)
>head(iris, n=5)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
>model <-naiveBayes(Species~., data = iris)
> pred <- predict(model, newdata = iris, type = 'raw')
> head(pred, n=5)
         setosa   versicolor    virginica
[1,]      1.00000 2.981309e-18 2.152373e-25
[2,]      1.00000 3.169312e-17 6.938030e-25
[3,]      1.00000 2.367113e-18 7.240956e-26
[4,]      1.00000 3.069606e-17 8.690636e-25
[5,]      1.00000 1.017337e-18 8.885794e-26

到目前为止一切都很好。在接下来的步骤中,我尝试创建一个新的数据点,并使用naivebayes模型(model)来预测类变量(Species),我选择了其中一个训练数据点。

代码语言:javascript
复制
> test = c(5.1, 3.5, 1.4, 0.2) 
> prob <- predict(model, newdata = test, type=('raw'))

其结果是:

代码语言:javascript
复制
> prob
        setosa versicolor virginica
[1,] 0.3333333  0.3333333 0.3333333
[2,] 0.3333333  0.3333333 0.3333333
[3,] 0.3333333  0.3333333 0.3333333
[4,] 0.3333333  0.3333333 0.3333333

而且很奇怪。我用作test的数据点是iris数据集的行。根据实际数据,该数据点的类变量是setosa

代码语言:javascript
复制
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa

naiveBayes正确地预测:

代码语言:javascript
复制
             setosa   versicolor    virginica
   [1,]      1.00000 2.981309e-18 2.152373e-25

但是当我试图预测test数据点时,它会返回不正确的结果。当我寻找一个数据点的预测时,它为什么会像预测的那样返回四行数据呢?我做错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-29 15:57:04

您需要与培训数据列名相对应的列名。你的训练数据

代码语言:javascript
复制
test2 = iris[1,1:4]

predict(model, newdata = test2, type=('raw'))
     setosa   versicolor    virginica
[1,]      1 2.981309e-18 2.152373e-25

data.frame定义的“新”测试数据

代码语言:javascript
复制
test1 = data.frame(Sepal.Length = 5.1, Sepal.Width = 3.5, Petal.Length =  1.4, Petal.Width = 0.2)

predict(model, newdata = test1, type=('raw'))
     setosa   versicolor    virginica
[1,]      1 2.981309e-18 2.152373e-25

如果你只给它一个维数,那么它就可以通过Bayes规则进行预测。

代码语言:javascript
复制
predict(model, newdata = data.frame(Sepal.Width = 3), type=('raw'))

        setosa versicolor virginica
[1,] 0.2014921  0.3519619  0.446546

如果将训练数据中未找到的维度提供给它,则会得到相同的类。输入一个更长的向量只会给你更多的预测。

代码语言:javascript
复制
predict(model, newdata = 1, type=('raw'))

        setosa versicolor virginica
[1,] 0.3333333  0.3333333 0.3333333
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31119922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档