我正在根据组值拆分训练和测试集中的一些数据。我怎样才能做到这一点以获得平衡的数据?
为了解决一个二元分类任务,我有 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)