为什么使用 Platt 标度法?

机器算法验证 物流 交叉验证 校准
2022-01-25 12:00:22

为了将置信水平校准为监督学习中的概率(例如,使用过采样数据从 SVM 或决策树映射置信度),一种方法是使用 Platt 的缩放(例如,从 Boosting 获得校准的概率)。

基本上一个使用逻辑回归来映射[;][0;1]. 因变量是真实标签,预测变量是来自未校准模型的置信度。我不明白的是使用 1 或 0 以外的目标变量。该方法要求创建新的“标签”:

为了避免对 sigmoid 训练集的过度拟合,使用了样本外模型。如果有N+正面例子和N训练集中的负样本,对于每个训练样本 Platt Calibration 使用目标值y+y(而不是分别为 1 和 0),其中

y+=N++1N++2;y=1N+2

我不明白这个新目标有什么用处。逻辑回归不是简单地将因变量视为二元标签(无论给出什么标签)?

更新:

我发现在 SAS 中将依赖项从1/0其他东西恢复到相同的模型(使用PROC GENMOD)。也许是我的错误,或者是 SAS 缺乏多功能性。我能够在 R 中更改模型。例如:

data(ToothGrowth) 
attach(ToothGrowth) 

  # 1/0 coding 
dep          <- ifelse(supp == "VC", 1, 0) 
OneZeroModel <- glm(dep~len, family=binomial) 
OneZeroModel 
predict(OneZeroModel) 

  # Platt coding 
dep2           <- ifelse(supp == "VC", 31/32, 1/32) 
plattCodeModel <- glm(dep2~len, family=binomial) 
plattCodeModel 
predict(plattCodeModel) 

compare        <- cbind(predict(OneZeroModel), predict(plattCodeModel)) 

plot(predict(OneZeroModel), predict(plattCodeModel))
2个回答

我建议查看逻辑回归的维基百科页面它指出,在二元因变量的情况下,逻辑回归将预测变量映射到因变量的发生概率。在没有任何转换的情况下,用于训练模型的概率为 1(如果 y 在训练集中为正数)或 0(如果 y 为负数)。

所以:拟合时不要使用绝对值 1 表示正类,使用 0 表示负类pi=1(1+exp(Afi+B))(在哪里fi是 SVM 的未校准输出),Platt 建议使用上述转换来允许相反的标签以一定的概率出现。通过这种方式,引入了一些正则化。当数据集的大小达到无穷大时,y+将变为 1 并且y将变为零。详情请参阅Platt 的原始论文

我发现另一种避免过度拟合的方法是将单变量逻辑回归模型拟合到 SVM 的遗漏交叉验证输出,这可以使用Span bound有效地近似。

但是,如果您想要一个生成类成员概率估计的分类器,那么您最好使用旨在直接执行此操作的核逻辑回归。SVM 的输出是为离散分类而设计的,不一定包含准确估计远离 p=0.5 轮廓的概率所需的信息。

如果您想要基于内核的概率分类器,高斯过程分类器是另一个不错的选择。