机器学习:量化缺失数据的不确定性
Machine Learning: quantifying uncertainty around missing data
我的问题是围绕我遇到的一个特定的class化问题。
我的训练数据完整,没有缺失数据。我可以围绕它构建任何 class 化模型(SVM、随机森林等)以获得良好的结果。到目前为止,猪还没有在对流层飞行。
问题是我想将这些模型应用于缺少特征的数据。我对任何形式的归责都不感兴趣。我想要一个 "uncertainty" 度量,它会随着缺少的功能的增加而增加,而且我仍然希望模型吐出一个结果(即使不确定性很高)。例如对于一条记录,如果 10 个特征中有 5 个是空数据,模型将给出 class 但不确定性为 50%(理想情况下我可以指定每个变量的 "important")。
我还没有 运行 在网上找到类似的东西,我已经找了一段时间了。
感谢您的帮助!
为什么是数据特定问题?
让我们从非常简单的模型开始——线性模型 (f(x) = sign(<w,x> + b)
)。我们还假设现在给定了一个缺失值 x_i=N/A
的向量,并且相应的权重不为零 (w_i != 0
);不失一般性让 w_i>0
,然后我们可以看到,我总是可以 "imput" x_i
如此之小(非常非常负的值,如 -10e10000
)模型将回答 -1
并且对称地,如此大的值将输出 +1
。为了进行预测(并进一步量化确定性),我们确实需要假设 x_i
的可能值。我希望这个简单的例子表明,没有任何假设我们就迷路了——我们什么也做不了,没有预测,没有确定性——什么都没有。这是机器学习中一个众所周知的事实——我们无法在没有模型诱发偏差的情况下进行预测。在这种情况下 - 我们对缺失值进行建模。
我们能做什么?
我们需要就价值观达成一致。有很多选择:
- 我们可以假设均匀分布,例如,如果它是一个具有 M 值的分类变量,我们将 1/M 概率放在每个可能的实例上。如果它介于 0 和 1 之间,我们可以在这样的范围内使用均匀分布。在这种情况下,我们需要有界值。如果值是无限的 - 没有均匀分布。
- 我们假设某种无限支持分布,例如简单的高斯分布,它可以是任意的(0 均值,1 标准差)或从数据中学习的(经验均值 + 经验标准差)。
- 我们推断出一些复杂的分布,可能使用非参数估计器 (KDE),甚至可能从其他维度推断出条件分布。
好的,它与数据插补有何不同?数据插补假定填充缺失值,它给你一个 point。我在这里谈论的是将我们的缺失值作为 概率分布 的观点来考虑 - 所以更多的贝叶斯方法。现在它不再是数据点,而是无限的点云,具有各种密度。
如何将经典的 ML 技术应用于分发?
不幸的是,这里事情变得复杂了,因为它是完全模型特定的问题。因此,根据您使用的 classifier/regressor 类型,您需要不同的方法。最简单的情况是随机森林,所以我将重点关注这个,稍后会给出一个效率较低但对任何模型都更通用的解决方案。
随机森林案例
在决策树中,每个节点都是对某些特征的决策。因此,为了对我们的 "distribution" 进行预测,我们只需将点放入决策过程 - 如果节点询问现有特征 - 我们将正常处理它。当我们被问及缺少功能时该怎么办?我们拆分执行,并计算 两条 路径,但权重是根据输出分布和节点中的阈值计算的。例如,假设我们在 [0,1] 上选择了均匀分布,并且阈值现在为 0.75(这意味着该节点询问缺失值是 <0.75 还是 >=0.75)。我们在两部分中拆分计算并检查预测,决策 <0.75 的权重为 0.75(因为它是一个积分 INT_{0}^{0.75} pdf(x) dx
,其中 pdf(x)
是我们的均匀分布),第二条路径的权重为 0.25。最后我们得到期望值。我们的信心是什么?您像往常一样计算,或者执行更复杂的置信区间分析。
一般方法
最通用的方法(可以作为黑盒用于任何模型)是Monte Carlo方法。我们有我们的分布 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
我的问题是围绕我遇到的一个特定的class化问题。
我的训练数据完整,没有缺失数据。我可以围绕它构建任何 class 化模型(SVM、随机森林等)以获得良好的结果。到目前为止,猪还没有在对流层飞行。
问题是我想将这些模型应用于缺少特征的数据。我对任何形式的归责都不感兴趣。我想要一个 "uncertainty" 度量,它会随着缺少的功能的增加而增加,而且我仍然希望模型吐出一个结果(即使不确定性很高)。例如对于一条记录,如果 10 个特征中有 5 个是空数据,模型将给出 class 但不确定性为 50%(理想情况下我可以指定每个变量的 "important")。
我还没有 运行 在网上找到类似的东西,我已经找了一段时间了。 感谢您的帮助!
为什么是数据特定问题?
让我们从非常简单的模型开始——线性模型 (f(x) = sign(<w,x> + b)
)。我们还假设现在给定了一个缺失值 x_i=N/A
的向量,并且相应的权重不为零 (w_i != 0
);不失一般性让 w_i>0
,然后我们可以看到,我总是可以 "imput" x_i
如此之小(非常非常负的值,如 -10e10000
)模型将回答 -1
并且对称地,如此大的值将输出 +1
。为了进行预测(并进一步量化确定性),我们确实需要假设 x_i
的可能值。我希望这个简单的例子表明,没有任何假设我们就迷路了——我们什么也做不了,没有预测,没有确定性——什么都没有。这是机器学习中一个众所周知的事实——我们无法在没有模型诱发偏差的情况下进行预测。在这种情况下 - 我们对缺失值进行建模。
我们能做什么?
我们需要就价值观达成一致。有很多选择:
- 我们可以假设均匀分布,例如,如果它是一个具有 M 值的分类变量,我们将 1/M 概率放在每个可能的实例上。如果它介于 0 和 1 之间,我们可以在这样的范围内使用均匀分布。在这种情况下,我们需要有界值。如果值是无限的 - 没有均匀分布。
- 我们假设某种无限支持分布,例如简单的高斯分布,它可以是任意的(0 均值,1 标准差)或从数据中学习的(经验均值 + 经验标准差)。
- 我们推断出一些复杂的分布,可能使用非参数估计器 (KDE),甚至可能从其他维度推断出条件分布。
好的,它与数据插补有何不同?数据插补假定填充缺失值,它给你一个 point。我在这里谈论的是将我们的缺失值作为 概率分布 的观点来考虑 - 所以更多的贝叶斯方法。现在它不再是数据点,而是无限的点云,具有各种密度。
如何将经典的 ML 技术应用于分发?
不幸的是,这里事情变得复杂了,因为它是完全模型特定的问题。因此,根据您使用的 classifier/regressor 类型,您需要不同的方法。最简单的情况是随机森林,所以我将重点关注这个,稍后会给出一个效率较低但对任何模型都更通用的解决方案。
随机森林案例
在决策树中,每个节点都是对某些特征的决策。因此,为了对我们的 "distribution" 进行预测,我们只需将点放入决策过程 - 如果节点询问现有特征 - 我们将正常处理它。当我们被问及缺少功能时该怎么办?我们拆分执行,并计算 两条 路径,但权重是根据输出分布和节点中的阈值计算的。例如,假设我们在 [0,1] 上选择了均匀分布,并且阈值现在为 0.75(这意味着该节点询问缺失值是 <0.75 还是 >=0.75)。我们在两部分中拆分计算并检查预测,决策 <0.75 的权重为 0.75(因为它是一个积分 INT_{0}^{0.75} pdf(x) dx
,其中 pdf(x)
是我们的均匀分布),第二条路径的权重为 0.25。最后我们得到期望值。我们的信心是什么?您像往常一样计算,或者执行更复杂的置信区间分析。
一般方法
最通用的方法(可以作为黑盒用于任何模型)是Monte Carlo方法。我们有我们的分布 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