如何对任意数量的分类变量进行分层K折拆分?

我有一个名为 df 的数据框,格式如下:

    cat_var_1    cat_var_2     num_var_10    Orange       Monkey         341    Banana        Cat           562    Orange        Dog           223    Banana       Monkey          6..

假设数据集中 cat_var_1 的可能值及其比例为 [‘Orange’: 0.6, ‘Banana’: 0.4],而 cat_var_2 的可能值及其比例为 [‘Monkey’: 0.2, ‘Cat’: 0.7, ‘Dog’: 0.1]。

如何将数据拆分为训练集、测试集和验证集(60:20:20 的比例),同时保持分类变量的比例不变?在实际操作中,这些变量的数量可以是任意数量,而不仅仅是两个。此外,很明显,精确的比例在实践中可能无法完全实现,但我们希望尽可能接近这些比例。

我已经查看了 sklearn 中描述的 StratifiedKFold 方法:如何将数据集拆分为训练集和验证集,同时保持类别之间的比例?,但这种方法仅限于基于一个分类变量进行评估。

另外,如果您能提供您所实现的解决方案的复杂度,我将不胜感激。


回答:

您可以将 df.cat_var_1+ "_" + df.cat_var_2 传递给 StratifiedShuffleSplit.split() 的参数 y

但这里有一个使用 DataFrame.groupby 的方法:

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注