小编Alb*_*lbe的帖子

如何进行 groupKfold 验证并平衡数据?

我正在根据组值拆分训练和测试集中的一些数据。我怎样才能做到这一点以获得平衡的数据?

为了解决一个二元分类任务,我有 100 个样本,每个样本都有一个唯一的 ID,一个主题和一个标签(1 或 0)。

为了避免在人物识别任务中退化,我需要同一主题不能同时出现在训练和测试集中。

受试者的数量少于样本的数量 (57),某些受试者仅出现在一个样本中,而其他许多具有相同或不同的标签。

我可以简单地使用 sklearn 的 gropKfold 来做到这一点,但我希望我的数据是平衡的(或至少接近平衡)

我尝试使用以下代码:

n_shuffles = 2
group_k_fold = GroupKFold(n_splits=5)

        for i in range(n_shuffles):
            X_shuffled, y_shuffled, groups_shuffled = shuffle(idx, labels, subjects, random_state=i)
            splits = group_k_fold.split(X_shuffled, y_shuffled, groups_shuffled)

            for train_idx, val_idx in splits:     
                X = perezDataFrame.loc[perezDataFrame['ID'].isin(X_shuffled[train_idx]),AU_names].values
                X = preprocessing.normalize(X, norm='l2')
                y = perezDataFrame.loc[perezDataFrame['ID'].isin(X_shuffled[train_idx]),'label'].values

                XTest = perezDataFrame.loc[perezDataFrame['ID'].isin(X_shuffled[val_idx]),AU_names].values
                XTest = preprocessing.normalize(XTest, norm='l2')
                yTest = perezDataFrame.loc[perezDataFrame['ID'].isin(X_shuffled[val_idx]),'label'].values
Run Code Online (Sandbox Code Playgroud)

其中 idx、主题和标签分别是 ID、主题和标签的列表。

但数据非常不平衡。

我也试过这个:

for i in range(5):
    GSP = GroupShuffleSplit(n_splits =10, test_size =0.20, train_size=0.80 …
Run Code Online (Sandbox Code Playgroud)

python machine-learning pandas scikit-learn k-fold

8
推荐指数
1
解决办法
641
查看次数

标签 统计

k-fold ×1

machine-learning ×1

pandas ×1

python ×1

scikit-learn ×1