【发布时间】:2021-03-05 15:37:05
【问题描述】:
让我首先给出一个我期望在我的代码中使用的数据集形式因素的通用示例。 感谢 @Sathish 帮助我表达这一点。
attribute1 <- c("str1", "str2", "strN")
attribute2 <- c("num1", "num2", "numN")
attributeN <- c("val1", "val2", "valN")
class <- c(TRUE, FALSE, TRUE || FALSE)
df <- data.frame(attribute1, attribute2, attributeN, class)
dput(df)
print(df)
类不一定需要是布尔值。为简单起见,我只是在此示例中使用它。
我正在尝试在R 中创建一个可重用的 ANN(人工神经网络),只要数据集符合某些标准,它就可以与任何 .csv 一起使用。我遇到的一个大问题是,我似乎无法弄清楚如何使用 createDataPartition() 和 library(caret) 之类的东西动态拆分数据:
data <- createDataPartition(dataset$lapply(dataset[ncol(dataset)]), p = test_ratio, list = FALSE)
这是我最近尝试解决上述代码 sn-p 的方法。注意fread()来自library(data.table):
library(caret)
library(data.table)
library(dplyr)
dataset <- as.data.frame(fread(file = file_name), header = TRUE)
class_label <- lapply(dataset[ncol(dataset)], function(x) names(dataset[ncol(dataset)]))
data <- createDataPartition('$'(dataset, class_label), p = test_ratio, list = FALSE)
类标签应该是任何数据集中的最后一列。在我看来,createDataPartition() 有点静态,因为它寻找 Data$Class 以这种特定方式进行区分。但是,我仍在学习 R,所以我可能会遗漏一些东西。我在几个地方寻找答案,但找不到任何具体的答案。
所以我认为我的问题的根源是我不确定如何使用lapply() 将类标签的名称传递给Data$Class。我的尝试给了我这个错误:
createDataPartition 中的错误(dataset$class_name, p = test_ratio, list = FALSE) : y 必须至少有 2 个数据点调用:get_stratified_samples -> createDataPartition 执行停止
我想我理解错误,但似乎无法弄清楚如何解决。我相信这是因为lapply(dataset[ncol(dataset)], function(x) names(dataset[ncol(dataset)])) 部分给了我一个类标签名称的字符串而不是类标签本身?
另外,我想做的另一件事是使用createDataPartition() 或类似的函数,根据多个类对数据进行分层拆分。这也让我望而却步。
如果我需要添加更多细节,请告诉我,我会尽力而为。
【问题讨论】:
-
@Sathish,你是对的。我用正确的信息更新了问题。我正在添加一个通用表,该表将采用我正在寻找的 .csv 数据的形式。根据我的理解,这是非常基本的。
-
感谢您为我的问题@Sathish 提供的所有帮助。你写的有一部分我不太明白。
df$X. <- NULL df$X..1 <- NULL df$X..2 <- NULL df$X..3 <- NULL dput(df) -
没错。我正在尝试根据最后一列对数据进行分层拆分,该列预计是类标签,而无需提前知道类标签名称。
-
那么
df$X..1指的是数据框的第一列?另外,df$X.让我有点困惑。它指的是什么? -
是的。分层拆分是一种拆分,其中原始数据集中的列值的比率保留在生成的训练和测试样本中。这就是我正在寻找的预期结果。
标签: r machine-learning r-caret