【发布时间】:2018-01-11 05:03:16
【问题描述】:
问题:我有一个包含 1,000,000 行的大型 Pandas 数据框,其中有一列用于连续(浮点)特征 F,该特征在 0 和 1 之间变化。F 的分布em> 在数据中高度倾斜。
我想从数据帧中抽取 N 行的随机样本(不替换),加权以使样本中 F 的直方图大致均匀(或尽可能接近均匀) !) 在 F = 0 和 F = 1 之间。
显而易见的解决方案是
_ , sampleDF = train_test_split(bigDF, test_size = N, stratify = bigDF['F'] )
但这会失败并显示错误消息,大概是因为 train_test_split 只应该针对离散或分类变量进行分层。
ValueError: y 中人口最少的类只有 1 个成员,太少了。任何类的最小组数不能少于 2 个。
理想情况下,此问题的解决方案将是快速且强大的,并且作为奖励短。我最终想出了一个涉及stats.gaussian_kde 的解决方案来估计F 的密度,然后将该密度提供给bigDF.sample(weights = 1/density),但它涉及很多手动调整,此外还没有t 似乎实际上给出了完全均匀的分布。如果没有人有好的解决方案,我可能会尝试将其写下来作为答案。
有没有人知道一个非常好的方法来做到这一点?
【问题讨论】:
标签: python pandas numpy scipy scikit-learn