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

av *_*iek 5 r classification machine-learning random-forest categorical-data

我有一个 20 列的训练数据集,所有这些都是我必须用于训练模型的因素,我已经获得了测试数据集,我必须在该数据集上应用我的模型进行预测并提交。

我正在进行初始数据探索,只是出于好奇检查了训练数据和测试数据级别,因为我们正在处理所有类别变量。令我沮丧的是,大多数类别(变量)在训练和测试数据集中具有不同的级别。

例如

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
Run Code Online (Sandbox Code Playgroud)

这里我在测试数据集中有一个额外的类别,我该如何处理这些情况,训练中 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
Run Code Online (Sandbox Code Playgroud)

在本专栏中,我们有 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
Run Code Online (Sandbox Code Playgroud)

这里我们有额外的 u 因子

我应该首先在训练集上建立一个模型并找到重要的预测变量,然后担心因子水平吗?

Pru*_*une 0

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

  • 我不认为OP声明有不同的特征,而是有不同的calcategories或factor特征值。如果是这样的话,那么我认为这是重复的(因为我刚刚评论了这个问题),并且我的回答解决了问题。 (4认同)