R NaiveBayes 分类器不会将类型读取为 "formula"
R NaiveBayes Classifier won't read type as "formula"
我正在使用 klaR 包中的 NaiveBayes 函数,但出于某种原因,该函数不会将我的输入参数读取为公式。我知道 NaiveBayes 函数有两种方法,一种是 "default",另一种是 "formula" 的输入 class。当我 运行 NaiveBayes 函数时,它将我的输入公式读取为默认类型并抛出错误。我的代码如下:
trainData <- read.csv("train.txt")
trainNB <- NaiveBayes(Type~., data = trainData)
我在 运行这些行之后收到的错误是:
Error in NaiveBayes.default(X, Y, ...) :
grouping/classes object must be a factor
trainData的class是数据框,trainData的前10行如下(我一共83行):
Area Perimeter Compactness Length Width Asymmetry Groove Type
1 14.80 14.52 0.8823 5.656 3.288 3.1120 5.309 1
2 14.79 14.52 0.8819 5.545 3.291 2.7040 5.111 1
3 14.99 14.56 0.8883 5.570 3.377 2.9580 5.175 1
4 19.14 16.61 0.8722 6.259 3.737 6.6820 6.053 0
5 15.69 14.75 0.9058 5.527 3.514 1.5990 5.046 1
6 14.11 14.26 0.8722 5.520 3.168 2.6880 5.219 1
7 13.16 13.55 0.9009 5.138 3.201 2.4610 4.783 1
8 16.16 15.33 0.8644 5.845 3.395 4.2660 5.795 0
9 15.01 14.76 0.8657 5.789 3.245 1.7910 5.001 1
10 14.11 14.10 0.8911 5.420 3.302 2.7000 5.000 1
如有任何帮助,我们将不胜感激。谢谢!
我认为你的因变量不是一个因素:
你应该这样做,trainData$Type <- as.factor(trainData$Type)
仅考虑这个玩具示例:
library(e1071)
m <- naiveBayes(Species ~ ., data = iris)
如果你想看结构,你会注意到 Species 在因子中,这里的 Species 是你的因变量:
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
>
我正在使用 klaR 包中的 NaiveBayes 函数,但出于某种原因,该函数不会将我的输入参数读取为公式。我知道 NaiveBayes 函数有两种方法,一种是 "default",另一种是 "formula" 的输入 class。当我 运行 NaiveBayes 函数时,它将我的输入公式读取为默认类型并抛出错误。我的代码如下:
trainData <- read.csv("train.txt")
trainNB <- NaiveBayes(Type~., data = trainData)
我在 运行这些行之后收到的错误是:
Error in NaiveBayes.default(X, Y, ...) :
grouping/classes object must be a factor
trainData的class是数据框,trainData的前10行如下(我一共83行):
Area Perimeter Compactness Length Width Asymmetry Groove Type
1 14.80 14.52 0.8823 5.656 3.288 3.1120 5.309 1
2 14.79 14.52 0.8819 5.545 3.291 2.7040 5.111 1
3 14.99 14.56 0.8883 5.570 3.377 2.9580 5.175 1
4 19.14 16.61 0.8722 6.259 3.737 6.6820 6.053 0
5 15.69 14.75 0.9058 5.527 3.514 1.5990 5.046 1
6 14.11 14.26 0.8722 5.520 3.168 2.6880 5.219 1
7 13.16 13.55 0.9009 5.138 3.201 2.4610 4.783 1
8 16.16 15.33 0.8644 5.845 3.395 4.2660 5.795 0
9 15.01 14.76 0.8657 5.789 3.245 1.7910 5.001 1
10 14.11 14.10 0.8911 5.420 3.302 2.7000 5.000 1
如有任何帮助,我们将不胜感激。谢谢!
我认为你的因变量不是一个因素:
你应该这样做,trainData$Type <- as.factor(trainData$Type)
仅考虑这个玩具示例:
library(e1071)
m <- naiveBayes(Species ~ ., data = iris)
如果你想看结构,你会注意到 Species 在因子中,这里的 Species 是你的因变量:
> str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
>