使用部分“未知”数据进行分类

机器算法验证 机器学习 神经网络 分类 半监督学习
2022-03-01 10:08:08

假设我想学习一个以数字向量作为输入并给出类标签作为输出的分类器。我的训练数据由大量的输入输出对组成。

但是,当我对一些新数据进行测试时,这些数据通常只是部分完整的。例如,如果输入向量的长度为 100,则可能只有 30 个元素被赋予了值,其余的都是“未知的”。

例如,考虑图像识别,其中已知图像的一部分被遮挡。或者考虑一般意义上的分类,其中已知部分数据已损坏。在所有情况下,我都确切地知道数据向量中的哪些元素是未知部分。

我想知道如何学习适用于此类数据的分类器?我可以将“未知”元素设置为随机数,但鉴于未知元素通常比已知元素多,这听起来不是一个好的解决方案。或者,我可以将训练数据中的元素随机更改为“未知”,并使用这些而不是完整数据进行训练,但这可能需要对已知和未知元素的所有组合进行详尽的抽样。

特别是我正在考虑神经网络,但我对其他分类器持开放态度。

3个回答

我认为有一种合理的方法可以使其与神经网络一起使用。

让你的未知值为0。现在在训练中,你选择一个输入并随机将它的一些值设置为 0,概率为,其中 p 是测试时缺失输入的预期分数。请注意,不同迭代中的相同输入将在不同位置具有 0。p

我以前从未见过它,但这与在你的输入神经元而不是隐藏神经元中进行Dropout(神经网络中一种众所周知的正则化方法)非常相似。我认为一般来说这样做不是一个好主意,但如果你被迫(如你的情况),至少理论上它与已知有效的东西足够接近。

我认为有一些选择适用于任何分类器:

  • 用单个值估算缺失值,例如训练集中的平均值或中值,或者从输入的观察部分预测的某个值,或者只使用随机数或常数。
  • 对未知数使用几个不同的值并汇总结果,例如平均它们

除此之外,您可以使用基于树的分类器(例如随机森林),如果树需要评估缺失特征的拆分,它可以将数据向下传递到两个子节点。

第三种选择是使用生成分类器来模拟完整的联合分布,其中是您的输入,是分类标签。这样,您将理想地边缘化的未知部分,即您将尝试的未知部分的任何并平均由该插补的概率加权的结果。对于某些分类器,这可以以封闭形式进行分析,例如线性判别分析模型,或者通过对未知数进行近似采样,例如受限玻尔兹曼机或其深度变体(与前馈神经网络相关)。p(x,y)xyxx

此解决方案与etal的解决方案非常相似,我建议添加的唯一更改是添加更多指示缺失值的功能。

对于每个特征,给出两个特征是真实值,如果它缺失,它将是平均值(或您的其他选择)。为 1,如果丢失,则为 0。因此,您的输入向量将是两倍大小。Xi[Xi1Xi2]Xi1Xi2

与 etal 的回答类似,您需要确保您的训练数据代表测试集。的随机放置缺失值应用变换p