在训练数据和测试数据中处理不同的因子水平

5

我有一个训练数据集,包含20列因子,我需要用它们来训练模型。我还有一个测试数据集,需要将模型应用于其上进行预测并提交结果。

在进行初步数据探索时,出于好奇心,我检查了训练数据和测试数据中因为所有变量都是类别变量而产生的级别(levels)。令我失望的是,大多数类别(变量)在训练和测试数据集中的级别不同。

例如

table(train$cap.shape) #training data column levels
  b    c    f    k    x 
196    4 2356  828 2300

table(test$cap.shape) #test data 

 b    f    s    x 
256  796   32 1356

这里我有一个测试数据集中的额外类别s,我该如何处理这些情况?训练集中c的额外类别非常低,因此我想根据其与相关变量的分布情况将其与其他因素合并,但我不知道如何处理测试中的额外级别。

更多例子

table(train$odor) #train
  c    f    m    n    p    s    y 
 189 2155   36 2150    2  576  576

table(test$odor) #test

  a    c    f    l    n    p 
400    3    5  400 1378  254

在这个栏中,我们在测试中有2个额外的级别,并且在测试数据集中有大量实例。我该如何处理这些差异。

table(train$sColour) #train
    b    h    k    n    o    r    w    y 
   48 1627  700  753   48   72 2388   48

   table(test$sColour) #test
    h    k    n    u 
    5 1172 1215   48

这里我们有额外的因素u

我是不是应该先在训练集上建立一个模型,找到重要的预测变量,然后再考虑因子水平?


@Tchotchke 我不想删除测试中的额外因素,我想知道如何处理这些额外因素,以便模型不会出错。 - av abhishiek
1
@Tchotchke,我是否应该将测试和训练数据合并,重构所有列,然后再次拆分数据? - av abhishiek
1
你说得对,那是我的误解。你提出的建议很有道理。不过我对你的数据有一个更大的问题,就是测试集和训练集似乎在这些因素上有极其不同的分布,所以建模任务可能会很困难。 - Tchotchke
@Tchotchke 是的,那个事实也让我感到不安。我将训练和测试数据集合并以使因子水平相等,并获得了71%的准确率,所以您有什么处理此类分类分布时建模的想法吗? - av abhishiek
1个回答

0

拥有不同的功能集违反了机器学习的基本原则。训练和测试数据必须代表相同的数据空间。这些数据并不是如此;尽管每对数据都有一组共同的特征(维度),但要在同一个模型上使用它们,您必须将每个集合缩减为仅包含共同的特征,或者将两个集合扩展到特征的并集,并为额外的特征填充“不关心”或语义上为空值。


4
我认为原帖并没有说明存在不同的特征,而是分类或因子特征的不同取值。如果是这种情况,那么我认为这是重复问题(正如我刚刚在问题下评论的),我的回答已经解决了这个问题。 - Tchotchke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接