我有一个数据框,其中包含一个给出聚类的列,我希望在每个聚类中使用相同的分数执行kfold并进行测试。
我知道我可以使用以下代码自行完成:
nb_fold = 10
for i in range(nb_fold):
X_train= X.groupby('Cluster').apply(lambda x: x.sample(frac = 1/nb_fold))
X_train.index = temp.index.droplevel(0)
Y_train = Y.loc[X_train.index]
X_eval, Y_eval = X.drop(X_train.index), Y.drop(Y_train.index)
但是我想知道是否有一个scikit学习包装器,因为这样做了替换抽奖,我可以使用抽奖而无需替换。
答案 0 :(得分:1)
看起来你需要StratifiedKFold
。它通常有助于在分类任务的折叠中保持类的分布相同。但是你可以对簇标签进行分层以达到预期的效果。
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=10)
for train_ind, eval_ind in skf.split(X, X['Cluster']):
X_train, Y_train = X.iloc[train_ind, :], Y.iloc[train_ind]
X_eval, Y_eval = X.iloc[eval_ind, :], Y.iloc[eval_ind]