我的问题是我遇到的具体分类问题。
我的训练数据已经完成,并且没有丢失数据。我可以围绕它构建任何分类模型(SVM,随机森林等)以获得良好的结果。到目前为止,猪还没有飞到对流层。
问题是我想将这些模型应用于缺少功能的数据。我对任何形式的估算都不感兴趣。我想要一个"不确定性"测量会增加缺失的特征,我仍然希望模型吐出一个结果(即使具有很高的不确定性)。例如,对于一个记录,如果10个特征中的5个是空数据,则该模型将给出一个类但具有50%的不确定性(理想情况下,我可以指定"重要"每个变量是什么)。
我还没有在网上碰到任何类似的东西,而且我一直在寻找一段时间。 谢谢你的帮助!
答案 0 :(得分:2)
让我们从非常简单的模型开始 - 线性模型(f(x) = sign(<w,x> + b)
)。我们还假设我们现在给出一个缺失值为x_i=N/A
的向量,并且相应的权重为非零(w_i != 0
);在不失一般性的情况下,w_i>0
,我们可以看到,我总是可以&#34; imput&#34; x_i
如此小(非常非常负面的值,如-10e10000
),模型将回答-1
并且对称,如此大的值,它将输出+1
。为了进行预测(并进一步 - 量化确定性),我们需要假设x_i
的可能值。我希望这个简单的例子表明,没有任何假设我们就会迷失 - 我们不能做任何事情,没有预测,没有确定性 - 什么都没有。这是机器学习中一个众所周知的事实 - 如果没有模型引发的偏差,我们就无法进行预测。在这种情况下 - 我们模拟缺失值。
我们需要同意这些价值观。有很多选择:
好的,它与数据插补有什么不同?数据插补假设填写缺失值,它会为您提供点。我在这里谈到的是将缺失值视为概率分布的思考 - 更多的贝叶斯方法。现在它不再是一个数据点,它是一个无限的点,具有不同的密度。
不幸的是,这里的事情变得复杂,因为它是完全针对模型的问题。因此,根据您使用的分类器/回归器的类型,您需要采用不同的方法。最简单的情况是随机森林,所以我将专注于这一个,后来为任何模型提供效率较低但更通用的解决方案。
在决策树中,每个节点都是对某个功能的决定。因此,为了预测我们的分发&#34;我们只是将重点放在决策过程中 - 如果节点询问现有功能 - 我们会正常处理它。当我们被问及缺少功能时该怎么办?我们拆分执行,并计算两个路径,但是根据out分布和节点中的阈值计算权重。例如,让我们假设我们在[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