为什么它是特定于数据的问题?
让我们从一个非常简单的模型开始——一个线性模型(f(x) = sign(<w,x> + b)
)。我们还假设现在给定一个带有缺失值的向量,x_i=N/A
并且相应的权重不为零(w_i != 0
);在不失一般性的情况下w_i>0
,我们可以看到,我总是可以“输入”这么小(非常非常负的值x_i
,比如 为了做出预测(并进一步量化确定性),我们确实需要假设可能的值-10e10000
-1
+1
x_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