【问题标题】:Logistic regression training and test data逻辑回归训练和测试数据
【发布时间】:2020-02-25 06:21:29
【问题描述】:

我是 R 的初学者,在一些感觉很基础的东西上遇到了麻烦,但我不知道该怎么做。我有一个包含 1319 行的数据集,我想为 1 到 1000 的观察设置训练数据和 1001 到 1319 的测试数据。

与我课堂上的笔记进行比较,教授通过她数据中的“年份”变量做一个布尔向量来设置它。例如:

train=(Year<2005)

这会返回真/假语句。

我理解这一点,并且如果我通过变量对数据进行子集化,我将能够设置一个布尔向量,但我必须严格按照我不明白如何完成的行数。我试过了

train=(data$nrow < 1001)

但结果是逻辑(0)。

谁能指引我正确的方向?

【问题讨论】:

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


    【解决方案1】:

    你得到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函数用于获取所有未在train中选择的行

    【讨论】:

    • 如何设置测试数据,然后在第二部分使用 [!train,]?因为这只是对数据进行子集化,而不是在前 1000 行有条件地设置训练/测试集
    【解决方案2】:

    按行拆分数据集的问题是可能会在您的训练和测试集中引入偏差 - 特别是对于有序数据。

    # 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
    

    【讨论】:

    • 嘿,这是一个班级作业,说明说使用前 1000 行,然后将其余的用于测试数据。也没有年份变量,我只是想用她自己的数据集示例来解释教授是如何做到这一点的。
    • 我在上面的回答中添加了一些关于索引的细节。
    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 2016-01-31
    • 2015-01-07
    • 2016-02-01
    • 2018-05-01
    • 2019-07-11
    • 2019-03-02
    • 2020-10-26
    相关资源
    最近更新 更多