我们如何在列的每个值中对 pandas 数据框进行二次采样
Posted
技术标签:
【中文标题】我们如何在列的每个值中对 pandas 数据框进行二次采样【英文标题】:How can we subsample a pandas dataframe within every value of a column 【发布时间】:2018-02-04 19:28:12 【问题描述】:我有一个数据框,其中有一列给出集群,我想在训练中执行具有相同分数的 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 learn 包装器,因为它会进行有替换的平局,而我可以使用没有替换的平局。
【问题讨论】:
【参考方案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]
【讨论】:
以上是关于我们如何在列的每个值中对 pandas 数据框进行二次采样的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PySpark 中的大型 Spark 数据框中对行的每个子集进行映射操作