如何正确拆分包含训练测试和交叉验证集的不平衡数据集

How to correctly split unbalanced dataset incorporating train test and cross validation set

上面的图片是我要复制的。我只是不知道我的做法是否正确。 我正在处理 FakeNewsChallenge 数据集及其极度不平衡,我正在尝试复制和改进论文中使用的方法。


同意 - 7.36%

不同意 - 1.68%

讨论 - 17.82%

无关 - 73.13%

我是这样拆分数据的:

(将数据集拆分为 67/33 拆分)

(将训练进一步拆分为 80/20 以进行验证)

(然后使用 3 折交叉验证集拆分训练和验证)

顺便说一句,要获得 1.68% 的不同意和同意非常困难。


这就是我遇到的问题,因为它对我来说没有任何意义。在 80/20 拆分中创建的验证集是否也在 5 倍中分层?

这是我目前所在的位置:


将数据分成 67% 的训练集和 33% 的测试集

x_train1, x_test, y_train1, y_test = train_test_split(x, y, test_size=0.33)

x_train2, x_val, y_train2, y_val = train_test_split(x_train1, y_train1, test_size=0.20)

skf = StratifiedKFold(n_splits=3, shuffle = True)
skf.getn_splits(x_train2, y_train2)

for train_index, test_index in skf.split(x_train2, y_train2):
  x_train_cros, x_test_cros = x_train2[train_index], x_train2[test_index]
  y_train_cros, y_test_cros = y_train2[train_index], y_train[test_index]

我还会 运行 skf 再次用于验证集吗?在顺序模型中使用的 skf 创建的测试集在哪里?


引用我正在使用的方法:

托塔,阿斯维尼;蒂拉克,普里扬卡;阿卢瓦利亚,西姆拉特;和 Lohia, Nibrat(2018 年)“假新闻检测:一种深度学习方法”,SMU 数据科学评论:卷。 1:第 3 条,第 10 条。 可在:https://scholar.smu.edu/datasciencereview/vol1/iss3/10

您需要在函数中增加一个参数'train_test_split()':

x_train1, x_test, y_train1, y_test = train_test_split(x, y, test_size=0.33, stratify = y)

这将使您平均分配所有目标类别。