我想使用bnlearn
朴素贝叶斯算法进行分类任务。
我使用这个数据集进行测试。其中 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)
,只是将其拆分为训练集和测试集。
那么哪个是优雅的解决方案呢?因为在现实世界的应用程序中,测试和训练集可以来自不同的来源。有任何想法吗?