【问题标题】:How to retain/reassing the factor levels for a data.frame in R?如何保留/重新评估 R 中 data.frame 的因子水平?
【发布时间】:2015-11-22 19:56:26
【问题描述】:

我有一个大型数据集,用于在 R 中训练机器学习算法。在所有数据预处理之后,我有一个包含因子和数值的数据框。我将这样的数据集拆分为训练集和测试集,并使用 write.csv() 将它们保存到文件中。

当我回读 test.csv 和 train.csv 文件时,可能会发生某些因素失去水平的情况。这使得某些算法在创建设计矩阵时会失败。

这里有一个详细的例子。假设最初我有一个包含 12 行的数据集,我将其拆分为 8 行的训练集和 4 行的测试集。我将 8 个训练行保存到 train.csv,将 4 行保存到 test.csv。请注意 factor2 在 train.csv 中有级别 (a,b,c,d):

  factor1 factor2 value
1       1       a     1
2       2       b     0
3       3       c     1
4       4       d     1
5       2       a     0
6       4       c     1
7       3       b     0
8       1       a     1

但只有 test.csv 中的 (a,b,c):

  factor1 factor2
1       4       a
2       2       b
3       4       c
4       1       a

factor1 也一样,测试集中缺少第 3 级。 当我读回文件 test.csv 时,R 假设 factor1 具有级别 (1,2,4) 而 factor2 具有级别 (a,b,c)。我想找到一种方法来告诉 R 实际水平。

我认为的解决方案是在开始时保存级别,从具有 12 个点的原始数据集中,然后在读取 train.csv 和 test.csv 后重新分配它们。

我想避免使用 R 中的 save() 方法,因为我创建的数据集可能会转到其他语言/包。

谢谢!

【问题讨论】:

    标签: r csv machine-learning dataframe


    【解决方案1】:

    在 R 中,子集应该将所有因子水平保留在一个向量中。这里让我们假设 a 是我们的数据,a 列是我们的分类变量,b 是我们的响应:

    a <- data.frame(a = c("a", "b", "c"), b = c(1, 2, 3))
    z <- a[1:2, ]
    z$a
    
    [1] a b
    Levels: a b c
    

    如果您在子设置中丢失因子来训练和测试集,您需要一种更好的子设置方法。

    如果您的问题是编写 .csv,您可能希望将它们作为 NA 重新包含在响应列中。您可以通过多种方式做到这一点 - 这是一个合并:

    merge(data.frame(a = levels(z$a)), z, all=TRUE)
    
      a  b
    1 a  1
    2 b  2
    3 c NA
    

    编辑:在您的示例中,使用第一个数据作为dat,第二个数据作为dat2

    levels(dat2$factor1) <- levels(dat$factor1)
    levels(dat2$factor2) <- levels(dat$factor2)
    

    将是最简单的方法。

    【讨论】:

    • 我会说在测试集中“丢失”一个因子值是可以的。无需其他子设置。我用(“a”,“b”,“c”)训练,但我只测试用例(“b”,“c”)。在我看来完全没问题。关于合并,你能用多种因素来做吗?我有多个“缺失”值的因素特征
    • 你应该看看 tidyr 包中的函数 expandcomplete。将您的数据的代表性部分放在问题中以获得更具体的示例。
    • 我用更详细的解释和一个玩具示例扩展了这个问题,该示例与我的数据集有相同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多