Я хочу использовать 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)
и только потом делю ее на обучающие и тестовые наборы.
Так что же является элегантным решением для этого? Потому что в реальных приложениях тестовые и обучающие установки могут быть из разных источников. Есть идеи?