Logistic回归训练和测试数据

时间:2019-10-30 00:19:12

标签: r logistic-regression training-data confusion-matrix test-data

我是R的初学者,遇到一些基本的问题,但我不确定该怎么做。我有一个包含1319行的数据集,我想为观察值1到1000设置训练数据,为1001到1319设置测试数据。

与我班和教授的笔记相比较,通过在她的数据中使用“ Year”变量对布尔向量进行设置来进行设置。例如:

train=(Year<2005)

然后返回True / False语句。

我了解这一点,并且如果我通过变量对数据进行子集设置,则能够设置布尔向量,但是我必须严格按照我不知道如何完成操作的行数进行设置。我尝试过

train=(data$nrow < 1001)

但是结果是逻辑(0)。

有人可以引导我朝正确的方向吗?

2 个答案:

答案 0 :(得分:0)

您得到logical(0)是因为nrow不是一列

您还可以通过使用行号来子集数据框

train = 1:1000 # vector with integers from 1 to 1000
test = 1001:nrow(data)
train_data = data[train,]
test_data = data[test,]

但是要小心,除非数据框中的行顺序是完全随机的,否则您可能希望随机获得1000行而不是前1000行,您可以使用

train = sample(1:nrow(data),1000)

然后您可以使用来获取train_datatest_data

train_data = data[train,]
test_data = data[setdiff(1:nrow(data),train),]

setdiff函数用于获取火车中所有未选择的行

答案 1 :(得分:0)

按行划分数据集的问题是有可能在训练和测试集中引入偏见,尤其是对于有序数据。

# Create a data set
data <- data.frame(year = sample(seq(2000, 2019, by = 1), 1000, replace = T),
                   data = sample(seq(0, 1, by = 0.01), 1000, replace = T))

nrow(data)
[1] 1000

如果您真的想获取前n行,则可以尝试:

first.n.rows <- data[1:1000, ]

caret软件包为在模型中使用交叉验证提供了一种更可靠的方法。

首先创建分区规则:

library(caret)
inTrain <- createDataPartition(y = data$year,
                           p = 0.8, list = FALSE)

请注意,y = data$year告诉R使用变量year进行采样,以确保您不会获得有序数据,并且不会对模型造成偏差。

p自变量告诉插入符号应将多少原始数据划分为训练集,在这种情况下为80%。

然后将分区应用于数据集:

# Create the training set
train <- data[inTrain,]

# Create the testing set
test <- data[-inTrain,]

nrow(train) + nrow(test)
[1] 1000