返回一个列以用于 R 中朴素贝叶斯的 for 循环
Returning a column to use in for loop for naive-bayes in R
我正在 R 中执行朴素贝叶斯算法。主要目标是预测变量的值。但在这个特定任务中,我试图看看哪个列更擅长预测它。
这是一个有效示例(但在实际数据集中,手动操作不是一种选择):
library(naivebayes)
data("mtcars")
mtcars$vsLog <- as.logical(as.integer(mtcars$vs))
mtcars_train <- mtcars[1:20,]
mtcars_test <- mtcars[20:32,]
car_model <- naive_bayes( data=mtcars_train, vsLog ~ mpg )
predictions <- predict(car_model,mtcars_test)
我遇到的问题是执行 for 循环,其中模型一次获取一列,并保存每个模型在预测值方面的表现。
我已经研究了不同的方法来输入列作为我可以迭代的东西,但无法使其工作。
我的问题的最小可重现示例是:
library(naivebayes)
data("mtcars")
mtcars$vsLog <- as.logical(as.integer(mtcars$vs))
mtcars_train <- mtcars[1:20,]
mtcars_test <- mtcars[20:32,]
for (j in 1:ncol(mtcars)) {
car_model <- naive_bayes( data=mtcars_train, vsLog ~ mtcars_train[,j] )
predictions[j] <- predict(car_model,mtcars_test)
}
问题是如何用我可以循环的东西替换第一个示例中的 mpg。我试过的东西: mtcars_train$mpg , unlist( mtcars_train[j] ) , colnames 。
我真的尝试用谷歌搜索这个问题,我希望这不是一个太愚蠢的问题。
感谢阅读
这可能会有帮助。如果要使用 for
循环,可以将 seq_along
与要在数据集中循环的列的名称一起使用。您可以使用 reformulate
创建一个公式,在您的示例中,您将 vsLog
以及列名称中的第 j 个项目。在此示例中,您可以将 predict
结果存储在列表中。也许这可能会转化为您的真实数据集。
pred_lst <- list()
mtcars_names <- names(mtcars_train)
for (j in seq_along(mtcars_names)) {
car_model <- naive_bayes(reformulate(mtcars_names[j], "vsLog"), data=mtcars_train)
pred_lst[[j]] <- predict(car_model, mtcars_test)
}
我正在 R 中执行朴素贝叶斯算法。主要目标是预测变量的值。但在这个特定任务中,我试图看看哪个列更擅长预测它。 这是一个有效示例(但在实际数据集中,手动操作不是一种选择):
library(naivebayes)
data("mtcars")
mtcars$vsLog <- as.logical(as.integer(mtcars$vs))
mtcars_train <- mtcars[1:20,]
mtcars_test <- mtcars[20:32,]
car_model <- naive_bayes( data=mtcars_train, vsLog ~ mpg )
predictions <- predict(car_model,mtcars_test)
我遇到的问题是执行 for 循环,其中模型一次获取一列,并保存每个模型在预测值方面的表现。 我已经研究了不同的方法来输入列作为我可以迭代的东西,但无法使其工作。 我的问题的最小可重现示例是:
library(naivebayes)
data("mtcars")
mtcars$vsLog <- as.logical(as.integer(mtcars$vs))
mtcars_train <- mtcars[1:20,]
mtcars_test <- mtcars[20:32,]
for (j in 1:ncol(mtcars)) {
car_model <- naive_bayes( data=mtcars_train, vsLog ~ mtcars_train[,j] )
predictions[j] <- predict(car_model,mtcars_test)
}
问题是如何用我可以循环的东西替换第一个示例中的 mpg。我试过的东西: mtcars_train$mpg , unlist( mtcars_train[j] ) , colnames 。 我真的尝试用谷歌搜索这个问题,我希望这不是一个太愚蠢的问题。
感谢阅读
这可能会有帮助。如果要使用 for
循环,可以将 seq_along
与要在数据集中循环的列的名称一起使用。您可以使用 reformulate
创建一个公式,在您的示例中,您将 vsLog
以及列名称中的第 j 个项目。在此示例中,您可以将 predict
结果存储在列表中。也许这可能会转化为您的真实数据集。
pred_lst <- list()
mtcars_names <- names(mtcars_train)
for (j in seq_along(mtcars_names)) {
car_model <- naive_bayes(reformulate(mtcars_names[j], "vsLog"), data=mtcars_train)
pred_lst[[j]] <- predict(car_model, mtcars_test)
}