1

我的问题是围绕我遇到的一个特定分类问题。

我的训练数据是完整的,没有缺失数据。我可以围绕它构建任何分类模型(SVM、随机森林等)以获得良好的结果。到目前为止,猪还没有在对流层中飞行。

问题是我想将这些模型应用于缺少功能的数据。我对任何形式的估算都不感兴趣。我想要一个“不确定性”度量,它会增加更多缺失的特征,并且我仍然希望模型吐出结果(即使具有很高的不确定性)。例如,对于一条记录,如果 10 个特征中有 5 个是空数据,则模型会给出一个类别,但不确定性为 50%(理想情况下,我可以指定每个变量的“重要性”程度)。

我没有在网上遇到过类似的东西,我一直在寻找一段时间。谢谢你的帮助 !

4

1 回答 1

2

为什么它是特定于数据的问题?

让我们从一个非常简单的模型开始——一个线性模型(f(x) = sign(<w,x> + b))。我们还假设现在给定一个带有缺失值的向量,x_i=N/A并且相应的权重不为零(w_i != 0);在不失一般性的情况下w_i>0,我们可以看到,我总是可以“输入”这么小(非常非常负的值x_i,比如 为了做出预测(并进一步量化确定性),我们确实需要假设可能的值-10e10000-1+1x_i. 我希望这个简单的例子表明,如果没有任何假设,我们就会迷失——我们什么都做不了,没有预测,没有确定性——什么都没有。这是机器学习中众所周知的事实——如果没有模型引起的偏差,我们就无法做出预测。在这种情况下 - 我们对缺失值进行建模。

我们能做什么?

我们需要就价值观可以是什么达成一致。有很多选择:

  • 我们可以假设均匀分布,例如,如果它是具有 M 个值的分类变量,我们将 1/M 概率放在每个可能的实例上。如果它介于 0 和 1 之间,我们可以在这样的范围内使用均匀分布。在这种情况下,我们需要有界值。如果值是无界的 - 没有均匀分布。
  • 我们假设一些无限的支持分布,例如一个简单的高斯分布,它要么是任意的(0-mean,1-std),要么是从数据中学习的(经验平均值 + 经验 std)。
  • 我们推断出一些复杂的分布,可能使用非参数估计器(KDE),甚至可能使用从其他维度推断的条件分布。

好的,它与数据插补有何不同?数据插补假设填充缺失值,它会给你一个。我在这里谈论的是考虑我们将缺失值作为概率分布的观点- 所以更多的是贝叶斯方法。现在它不再是一个数据点,它是一个无限的点云,具有不同的密度。

如何将经典的 ML 技术应用于分发?

不幸的是,这里的事情变得复杂,因为它完全是特定于模型的问题。因此,根据您使用的分类器/回归器类型 - 您需要不同的方法。最简单的情况是随机森林,所以我将专注于这个,稍后为任何模型提供一个效率较低但更通用的解决方案。

随机森林案例

在决策树中,每个节点都是对某些特征的决策。因此,为了对我们的“分布”做出预测,我们只需将点放入决策过程中——如果节点询问现有特征——我们会正常处理它。当我们被问及缺少功能时该怎么办?我们拆分执行,并计算两条路径,但权重从分布和节点中的阈值计算。例如,假设我们在 [0,1] 上选择了均匀分布,阈值现在为 0.75(这意味着该节点询问缺失值是 <0.75 还是 >=0.75)。我们在两部分中拆分计算并检查预测,具有 <0.75 决策的那部分的权重为 0.75(因为它是一个积分INT_{0}^{0.75} pdf(x) dx,其中pdf(x)是我们的均匀分布),第二条路径的权重为 0.25。最后我们得到期望值。我们的信心是什么?您照常计算,或执行更复杂的置信区间分析。

一般方法

最通用的方法(可以作为黑盒用于任何模型)是蒙特卡洛方法。我们有我们的分布pdf(x),所以我们从这个分布中重复采样,分类并记录输出。最后 - 我们收集选票并获得分类和信心。伪代码如下

function CLASSIFY_WIT_NA(x, probability_model, model, k=1000):
  pdf <- probability_model(x.missing_values)
  predictions <- empty set
  for i=1 to k
    x' ~ pdf
    prediction <- model(x')
    predictions.add(prediction)

  class <- most_common_element_of(predictions)
  confidence <- count(class, predictions) / k
于 2015-11-10T19:29:22.330 回答