1

我在 R 平台中使用 randomForest 包来构建二进制分类器。大约有 30,000 行,其中 14,000 行在正类中,16,000 行在负类中。我有 15 个已知对分类很重要的变量。

我有一些额外的变量(大约 5 个)缺少信息。这些变量的值为 1 或 0。1 表示存在某物,而 0 表示不知道它是否存在。众所周知,如果有 1,这些变量将是分类最重要的变量(增加分类的可靠性,并且样本更有可能属于正类),但如果有 0,则无用。而且,只有 5% 的行的值为 1。因此,一个变量仅对 5% 的情况有用。这 5 个变量是相互独立的,所以我希望这些变量对我拥有的 15-25% 的数据非常有用。

有没有办法利用可用数据但忽略单个列中存在的缺失/未知数据?您的想法和建议将不胜感激。实现不必特定于随机森林和 R 平台。如果使用其他机器学习技术或在其他平台上可以做到这一点,那么它们也是最受欢迎的。感谢您的时间。问候

4

2 回答 2

1

我至少可以看到以下方法。就个人而言,我更喜欢第三种选择。

1)丢弃多余的列

您可以选择丢弃这 5 个额外的列。显然这不是最优的,但最好知道这个选项的性能,并与以下内容进行比较。

2)按原样使用数据

在这种情况下,这 5 个额外的列将保持原样。这5列中的每一列中的确定存在(1)或未知存在/不存在(0)用作信息。这与说“如果我不确定某物是否存在,我会将其视为不存在”是一样的。我知道这很明显,但是如果您还没有尝试过,您应该将其与选项 1 进行比较。

3)使用单独的分类器

如果这 5 列中的每一列中大约 95% 都为零,并且它们大致相互独立,那么 0.95^5 = 77.38% 的数据(大约 23200 行)在所有这些列中都为零。您可以在这 23200 行上训练分类器,删除全为零的 5 列(因为这些列对于所有点都是相等的,所以无论如何它们的预测效用为零)。然后,您可以为剩余的点训练一个单独的分类器,其中至少有一个列设置为 1。对于这些点,您可以保持数据不变。

然后,对于您的测试点,如果所有这些列都为零,则使用第一个分类器,否则使用第二个分类器。

其他提示

如果 15 个“正常”变量不是二元的,请确保使用可以处理具有不同标准化的变量的分类器。如果您不确定,请将 15 个“正常”变量归一化,使其位于区间 [0,1] 内——这样做您可能不会丢失任何东西。

于 2012-12-20T10:42:21.317 回答
0

我想对 Herr Kapput 提出进一步的建议:如果您使用概率方法,您可以将“缺失”视为您有一定概率观察到的值,无论是全局还是在每个类中(不确定哪个更感觉)。如果它丢失,它有发生概率 p(missing),如果它存在,它有概率 p(not missing) * p(val | not missing)。这使您可以优雅地处理值存在时具有任意范围的情况。

于 2012-12-20T11:36:52.813 回答