在某些特征未知时训练分类器

数据挖掘 机器学习 分类 数据集 matlab
2021-09-25 10:05:45

我正在使用我创建的数据集在 Matlab 中训练分类器。不幸的是,数据集中的一些特征没有被记录下来。

我目前将未知功能设置为 -99999。

因此,例如,我的数据集看起来像这样:

class1: 10 1 12 -99999 6 8
class1: 11 2 13 7 6 10
...
class2: 5 -99999 4 3 2 -99999
class2: -99999 16 4 3 1 8
...
class3: 18 2 11 22 7 5
class3: 19 1 9 25 7 5
...

依此类推,其中 -99999 是无法测量特征的地方。在这种情况下,每个类有 6 个特征。

我不想让我的分类器偏向于未知特征,所以我认为将未知数设置为 -99999 是个好主意,这样它就会超出正常特征的范围。

我用 -99999 测试了分类器,它的准确率为 78%。然后我将 -99999 更改为 0 并再次测试分类器,这次准确率为 91%。

所以我的问题是,当某些特征没有被记录时,训练分类器的一般规则是什么?我假设将未知数设置为非常高的负值是否正确?但是为什么当我将未知数设置为 0 时它会更准确呢?

谢谢阅读!

1个回答

欢迎来到数据科学 SE!

好吧,我们说我们的大部分工作是与数据争吵,那是因为数据通常试图欺骗我们......除了笑话:

您有丢失数据的问题

这意味着您必须清理数据并填充那些缺失值。要执行此清洁过程,您必须带上您内心最经典的统计学家并询问:

  • 为什么缺少这些数据?
  • 丢失了多少数据?

特定信息不可用的原因有很多。这将要求您做出假设并决定如何处理。

Jeff Sauro 在 MeasurementU 上发帖:处理缺失数据的 7 种方法,我在这里列出了一些:

  • 删除损坏的样本:

如果您有一个大数据集并且没有太多数据丢失,您可以简单地删除那些损坏的数据点并继续生活

  • 恢复值:

有些问题会让您返回并获取丢失的信息。

我们通常没那么幸运,那么你可以

  • 有根据的猜测:

有时,您可以通过简单地查看它们的梨来推断特征值。这有点武断,但它可能会奏效。

  • 平均:

这是最常见的方法,只要它缺失,只需使用该值的平均值。这可能会人为地减少您的方差,但对每个缺失值使用 0 或 -9999... 也是如此。

  • 回归替换:

您可以使用多元回归从每个候选者的可用值中推断缺失值。

关于缺失数据的一些参考资料是:

  • Allison, Paul D. 2001。缺失数据。Sage 大学关于社会科学定量应用的论文系列。千橡树:鼠尾草。
  • 恩德斯,克雷格。2010. 应用缺失数据分析。吉尔福德出版社:纽约。
  • 小,罗德里克 J.,唐纳德鲁宾。2002. 缺失数据的统计分析。约翰威利父子公司:霍博肯。
  • 谢弗、约瑟夫 L.、约翰 W. 格雷厄姆。2002. “缺失数据:我们对最新技术的看法”。心理学方法。

关于你的实验:

添加 -99... 会产生异常值,并且该信息量很大(从数字上讲,它很大)并且会影响参数调整。例如,假设您有以下数据:

| Feature1 | Feature2 | 
|----------|----------|
| 0        | 8        |
| -1       | 7        |
| 1        | -        |
| -        | 8        |

然后您尝试用 -99 填充缺失值,现在尝试通过数据拟合线性回归。你能看到你不能正确地适应它吗?

棕色线

这条线不适合,这将产生糟糕的性能。

另一方面,添加 0 值将给出一条更好的线:

黄线

它仍然不是很好,但稍微好一点,因为参数的比例会更真实。

现在,使用平均值,这种情况是否会给你更好的曲线,但使用回归会给你一个完美的拟合线:

完美的线条

注意:我需要重新制作这些图像,但这些应该在我有时间之前完成。