具有交叉验证的目标编码

数据挖掘 交叉验证 编码
2022-02-11 17:49:39

我正在尝试使用(两级)交叉验证来理解这种目标(均值/影响/可能性)编码方式。

它取y的平均值。但不是简单的意思,而是在cross-validation中的cross-validation中;

假设我们有 20 倍交叉验证。我们需要以某种方式仅使用来自 #2-#20 折叠的信息来计算 #1 折叠的特征的平均值。

因此,您采用#2-#20 折,在其中创建另一个交叉验证集(我做了 10 折)。计算每个留一折的平均值(最后你得到 10 个平均值)。您对这 10 个均值进行平均,并将该向量应用于您的主要 #1 验证集。对剩余的 19 折重复此操作。

很难解释,很难理解和掌握 :) 但如果做得正确,它可以带来很多好处:)

据我了解,这种方法的动机是:目标编码需要输出的知识,而这在测试集上是不可用的。因此,如果我们使用从整个训练集获得的均值并应用于测试集,则可能会导致过度拟合。因此,我们将使用从其子集派生的其他值。

我从这篇文章中找到了一些讨论,但无法理解以下几点:

1)在我看来,他的二级CV不过是取整个#2-#20折的平均值而已。所以基本上,这只是一级交叉验证,我们不使用#1 折叠的平均值,而是使用#2-#20 折叠的平均值作为#1 折叠的平均值。我在这里错过了什么吗?

2) 一旦我们获得了所有 20 折的手段,我们接下来要做什么?如果我们取平均值,这也只是取所有火车组的平均值。

2个回答

你的问题1:

你很接近但不完全是。

每次取平均值时,您只包括具有给定值的样本,例如分类特征的 A。

您将 #2-#20 折叠分成 10 个相等的折叠;但是,如果只考虑类别值为 A 的样本,它们的数量可能在这 10 折中有所不同。

比如说,这些数字是 n1,...,n10。

然后,除第一个折叠之外的所有平均值将 0 的权重分配给第一个折叠中的样本,并将 1/(n2+...+n10) 的权重分配给所有其他折叠中的每个样本。

除第二折外的所有平均值将 0 的权重分配给第二折中的样本,将 1/(n1+n3+n4+...+n10) 的权重分配给所有其他折中的每个样本,依此类推。

取这些平均值的平均值得到目标的加权平均值,样本的权重是上述权重的平均值。

对于不同折叠的样本,这些权重会略有不同。

因此,我们得到了#2-#20 折叠的加权平均值,但通过这个随机程序获得的权重略有不同。

您可能想了解这有什么意义:它比仅在折叠 #2-#20 上取普通平均值更好吗?

这个过程为编码的值增加了随机性。(例如,可以通过类别值 A 的编码值的标准偏差来测量随机性。)

编码值的这种随机性可能会阻止算法学习编码和目标之间的关系,以防这种关系仅在训练集中成立,即减少过拟合。

这种随机性取决于两个参数:

  1. 具有类别值 A 的样本的目标值分布的宽度。(可以测量宽度,例如,通过标准差。)这些目标值的更广泛分布导致编码的更大随机性(更广泛的分布)价值观。

  2. 类别值为A的样本数:样本越多,编码值的随机性越小。

可以将这种方式与增加编码值随机性的其他方式进行比较。最简单的方法是进行单次交叉验证,但少于 20 折。这将增加编码值的随机性,但主要取决于目标值分布的宽度,而不是 A 类中的样本数量。这可能是这种双重交叉验证的原因。

你的问题2:

正如您所说,重点是为每个样本使用不包括该样本的目标值的平均值。

对于具有类别值 A 的折叠 #1 中的样本,平均目标编码的值是折叠 #2-#20 中具有类别值 A 的所有样本的目标值的(加权)平均值(计算为多于)。

这意味着 A 的编码值在不同的折叠中会有所不同。

您引用的帖子未提及测试集。其他帖子建议在测试集上取整个训练集中所有具有类别 A 的样本的目标值的平均值。

@Baruch Youssin 我不确定我是否理解为什么 k 折目标均值编码计算引入的可变性会减少过度拟合。

我知道通过应用 k 折目标均值编码而不是均值编码可以避免数据泄漏(即使用有关 Y 的特定行的信息来计算特征 X)。

但是假设没有数据泄漏,并且由于在您的测试集中,您将使用单个值来表示特征 X 中的类别(在训练集的 k 折中计算的 k 目标平均编码的平均值),那么我明白了你只关心的是你与你的模型在 Y 和特征 X 之间的关系在用于表示测试集中类别的 X 值处,在你的训练集和测试集中保持相同. 不确定我是否在这里遗漏了其他东西。