【发布时间】:2018-10-07 09:11:36
【问题描述】:
我想使用bnlearn 进行具有朴素贝叶斯算法的分类任务。
我使用this 数据集进行测试。其中 3 个变量是连续的 ()V2、V4、V10),其他变量是离散的。据我所知bnlearn 不能处理连续变量,因此需要将它们转换为因子或离散化。现在我想将所有特征转换为因子。但是,我遇到了一些问题。这是一个示例代码
dataSet <- read.csv("creditcard_german.csv", header=FALSE)
# ... split into trainSet and testSet ...
trainSet[] <- lapply(trainSet, as.factor)
testSet[] <- lapply(testSet, as.factor)
# V25 is the class variable
bn = naive.bayes(trainSet, training = "V25")
fitted = bn.fit(bn, trainSet, method = "bayes")
pred = predict(fitted , testSet)
...
对于此代码,我在调用 predict() 时收到一条错误消息
“V1”在节点和数据中的层数不同。
当我从训练集中删除那个 V1 时,我得到 V2 变量的相同错误。但是,当我进行分解dataSet [] <- lapply(dataSet, as.factor) 时,错误消失了,只是将其拆分为训练集和测试集。
那么,什么是优雅的解决方案呢?因为在现实世界的应用程序中,测试和训练集可能来自不同的来源。有什么想法吗?
【问题讨论】:
标签: r naivebayes bnlearn