是否应该使用留一法进行标准化?

机器算法验证 正态分布 标准化
2022-03-22 20:31:37

当我们有来自正态分布的数据时,我们可能希望将样本中的值标准化为在这种情况下,习惯上从每个观察中减去样本平均值,然后除以标准偏差 (sd)。但是,这不应该使用每个数据点的均值和 sd 的留一计算来完成吗?也就是说,对于每个观察,我们将从数据中删除它,计算平均值和标准差,使用它们来标准化观察 - 并对所有数据点重复此过程。N(0,1)

这种替代解决方案显然是计算密集型的,但它会给出“更好”的结果吗?

答案(和参考)非常受欢迎。

2个回答

如果目标是标准化数据集(平均中心和测量距离以标准差为单位的平均值),那么留一法 (LOO) 方法根本不正确。这可以通过一个简单的数据集(带有异常值,夸大其词)来最好地看到。 如果转换为标准化 ( ) 分数,那么您将获得一个均值为 0 且标准差为一。另一方面,如果您对分数进行学生化(使用 LOO 标准化),您将获得一个平均值为 0.437±2.417 的数据集。因此,您未能“标准化”数据集。

{47.5,50.7,55.7,58,42.1,51.8,40.8,39.9,45.6,95}
z

现在,如果您试图通过标准化数据集来实现更广泛的目标,那么您可能想要学生化。例如,如果您希望评估上述数据集中的异常值在多大程度上实际上是“不遵循其余数据的模式”,则标准化值为,但学生化值为z(10)=2.63z(10)=7.22

请注意,有人可能会争辩说异常值是如此极端,以至于任何一种方法都应该标记它。但是,如果您有多个异常值,情况可能并非总是如此(特别是如果它们出现在分布的两端)。要看到这一点,您可以将第一个值更改为,以查看您可能会错过标准化分数的异常值。您还可以将第一个值更改为以查看如何能够检测到远离“其余数据”的更多极端趋势。x(1)=97.5x(1)=7.5

鉴于您使用了“留一法”一词,我认为该问题所暗示的是您想要进行 LOO 交叉验证。也就是说,您想在 n-1 个示例上进行训练并在剩余示例上测试您的模型。在那种情况下,在方法上非常严格,你是对的。标准化仅在训练集上执行,在本例中为 n-1 个示例。对于测试示例,您减去训练集的平均值并除以训练集的标准差。这适用于您选择的任何交叉验证。标准化是您正在创建的模型的一部分,您只使用训练集来学习标准化,就像您只使用训练集来学习任何其他参数一样。然后模型应用于测试集。

在实践中,您几乎不需要如此严格。您可以学习整个集合的标准化参数(均值和标准差),然后才使用交叉验证。这样做的后果是什么?发生的事情是,一旦定义了交叉验证,您就在训练中使用了测试集的一些信息(它对一般均值和标准差的贡献)。这通常会导致交叉验证测量结果有些乐观。如果您正在测量 X 并且 X 越高越好,在学习步骤中使用测试集的一些信息将导致在测试集上测量到的 X 值比“真实”值更高。

如果您的最终目标是报告 X 本身,那么您的测量结果会有些膨胀。如果您的数据点很少,情况会更糟。但是,如果您的目标是使用度量 X 在不同模型中进行选择,那么膨胀的 X 很可能对于所有模型都是“相同的”,并且顺序将被保留,或者至少很可能是最好的模型在这两种情况下都是一样的。同样,您拥有的数据越多,这就越有可能。

总而言之,如果你有很多数据,不用担心,对整个数据集进行标准化。如果您的数据很少(这将是使用 LOO 而不是其他交叉验证方案的一个很好的理由),那么请按照您的描述执行标准化。