尝试使用“bnlearn”实现一个简单的朴素贝叶斯分类器。不断收到错误“变量必须是数字、因子或有序因子”
Posted
技术标签:
【中文标题】尝试使用“bnlearn”实现一个简单的朴素贝叶斯分类器。不断收到错误“变量必须是数字、因子或有序因子”【英文标题】:Trying to implement a simple Naive Bayes classifier using "bnlearn". Keep getting error "variables must be either numeric, factors or ordered factors" 【发布时间】:2016-02-11 14:50:09 【问题描述】:我正在尝试通过重新创建给我的数据结果来在 R 中实现一个 NB 分类器。现在我只是对训练数据本身进行测试,看看准确度如何。
数据集中有 29 个变量,其中一个称为“状态”。它有两个值,赢和输。我将训练数据分成大约 2/3 的训练和 1/3 的测试。目标是确定 Status 预测输赢的准确性。
我想我理解错误,因为“赢”和“输”不是数值,但据我了解,它们不是因素吗?我将在下面发布我的代码。我正在使用来自http://www.bnlearn.com/documentation/man/naive.bayes.html 的 bnlearn 示例作为我的基础。如果有更好的例子,请告诉我。
#Read in training data
trainingdata <- read.csv("C:\\.....filepath.csv", header=T)
#Split data into training and test sets
training.set = trainingdata[1:1200, ]
test.set = trainingdata[1201:1860, ]
#Train model
bn = naive.bayes(training.set, "Status")
fitted = bn.fit(bn, training.set)
#Predict
pred = predict(fitted, test.set)
table(pred, test.set[, "Status"])
我开始从bn = naive.bayes(training.set, "Status")
行得到错误。具体错误说"Error in data.type(x) : variables must be either numeric, factors or ordered factors
有没有办法让 bnlearn 认识到“状态”是一个因素。
【问题讨论】:
尝试查看str(trainingdata)
以查看您的变量是否属于适当的类型。
我的猜测是“状态”是一个字符向量。
@Cotton.Rockwood 如果我这样做,它表示所有变量都是具有不同级别的因子,除了其中两个是整数。会不会是两个 int 导致问题?
您应该向reproducible example 提供示例输入,我们可以运行它来查看发生了什么。
我猜是这样。在naive.bayes
的文档中,它说数据框中的所有变量都必须是因子。您可以添加trainingdata <- lapply(trainingdata, as.factor)
。这假设所有变量都可以合理地转换为因子,如果您打算将它们与naive.bayes
一起使用,无论如何都应该是这种情况。
【参考方案1】:
几年后回到今年,因为我意识到我从来没有用答案更新它,从那时起没有人发布解决方案让我接受。
Cotton.Rockwood 的假设是正确的。使用 bnlearn 的朴素贝叶斯分类器,所有变量都需要是因子,否则会遇到这个错误。
【讨论】:
以上是关于尝试使用“bnlearn”实现一个简单的朴素贝叶斯分类器。不断收到错误“变量必须是数字、因子或有序因子”的主要内容,如果未能解决你的问题,请参考以下文章