【问题标题】:Python - Sampling imbalanced datasetPython - 采样不平衡数据集
【发布时间】:2022-11-15 10:55:05
【问题描述】:

我有一个包含 3 个类的数据集,下面是 value_counts()。

Class 0 - 2000
Class 1 - 10000
Class 2 - 10000

我想使用如下分布对该数据集进行采样。

Class 0 - 2000 (i.e., all rows from Class 0)
Class 1 - 4000 (i.e., twice as many rows as Class 0)
Class 2 - 4000 (i.e., twice as many rows as Class 0)

使用权重的随机抽样只能检索到 0 类的一小部分。请提供建议。

【问题讨论】:

  • “请指教”:听起来像是在做它应该做的事! stats.stackexchange.com 更适合统计问题。如果你真的想要那个发行版,那为什么不去做呢?即创建一个仅针对“0 类”行过滤的数据框,然后附加 4000 个随机行的“1 类”,并再次为“2 类”...
  • 谢谢山姆。事实上,这正是我现在正在做的事情(为每个类创建单独的 DF 并将它们连接起来),但我觉得这是一种幼稚的方法。所以想知道是否还有其他方法可以做到这一点。

标签: python pandas machine-learning random sample


【解决方案1】:

如果我理解正确的话:

# Create sample data
df = pd.DataFrame({"class": np.repeat([0, 1, 2], [2_000, 10_000, 10_000])})

# The distribution matrix
distribution = {0: 2000, 1: 4000, 2: 4000}

# Take samples based on the distribution matrix
sample = pd.concat(
    [group.sample(distribution[class_]) for class_, group in df.groupby("class")]
)

【讨论】:

  • 非常感谢代码不同。它工作完美。
猜你喜欢
  • 2018-05-17
  • 2023-03-03
  • 2017-10-29
  • 2017-10-28
  • 2020-09-06
  • 2019-03-15
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
相关资源
最近更新 更多