如何填充我的数据,以便我只获得欠采样采样技术而不进行建模。 我需要对过采样和称重做同样的事情。 我正在尝试使用这三种采样技术(当然一次一种)运行 xgboost。 因此,我需要一个显示欠采样的数据集、一个用于过采样的不同数据集以及第三个用于称重的数据集。 谢谢。
你好@尼莎库马尔,
您可能有几种方法可以做到这一点,这可能取决于您的最终目标是什么,哪种方法更好。
一种选择是创建一个验证列,将其高度偏移到一个变量,例如 10% 的训练和 90% 的验证,然后创建训练数据的子集并对其进行拟合。 将拟合公式保存到子集表中,然后将其带回原始数据表,并查看拟合在未经训练的数据上的效果如何。 然后,您可以通过将验证数据视为“训练”数据来执行相反的操作,重复上述步骤并查看它与训练(“验证”)数据集的拟合程度。 如果您想根据正在建模的输出对验证列进行分层,则可以执行此选项,但是,如果您不在乎,则可以尝试其他选项。
另一种选择是使用“行”>“行选择”>“随机选择”,并使用 10% 或 90%,甚至 1% 和 99%,然后为每个数据创建一个子集,进行拟合并将公式带回到将它们与原始表中未使用的数据进行比较。
至于对数据进行加权,这在很大程度上取决于您使用的数据集以及如何处理数据。 如果您有看起来异常的数据,但没有理由将它们从数据集中删除,您可以将它们的权重小于其他数据,这样它们就不会偏向拟合,但您需要单独查看这些数据才能看到如何处理此类情况。
我使用 Boston Housing.jmp 样本数据尝试了第二种方法,结果非常好。 它并没有完全过度拟合数据,从而在过采样数据集的“验证”数据上为我提供更大的 R^2,但它比使用验证列并使用验证列拟合数据要大。
顺便说一句,我使用 XGBoost 平台拟合数据,并且(响应 = mvalue;所有其他列均为 X,因子)使用默认设置并选中“自动调谐”框。
欠采样结果(1=训练,0=验证):


过采样(1=训练,0=验证):


以下是使用根据 mvalue 分层的 .75/.25 训练/验证列的结果:


最后一个验证数据的 R^2 不如过采样模型那么高,但它可能更准确,因为模型验证中使用的样本比使用太多样本进行训练时使用的样本更多。
不管怎样,我希望这能给你一些关于如何进一步实现你的特定目标的想法。
祝你好运!,
DS
非常感谢您,我将一一尝试这些技术并提供反馈/问题。