【问题标题】:How to oversample instances in a data set in R如何在 R 中对数据集中的实例进行过采样
【发布时间】:2011-10-13 20:11:08
【问题描述】:

我有一个包含 20 个类的数据集,它的分布非常不均匀。 R 中是否有任何功能可以让我们平衡数据集(也许是加权的)?

我想使用 Weka 的平衡数据进行分类。由于我的班级分布有偏差,如果没有单一的多数班级,我希望能获得更好的成绩。

我曾尝试使用 SMOTE 过滤器和重采样过滤器,但它们并不能完全满足我的要求。 我不想删除任何实例,重复就可以了。

【问题讨论】:

  • 不确定是谁投了反对票,但我认为这是因为需要更多信息来回答您的问题。尝试使用 str() 或 dput() 处理您的数据,让人们了解您需要处理的具体内容。
  • 另外,你的问题可能更适合stats.stackexchange.com

标签: r dataset weka


【解决方案1】:

我认为您的术语存在误解。您的问题的标题是指抽样,但问题文本涉及加权。

澄清一下:

通过抽样,您可以拥有比原始集合更少、相同或更多的实例;样本的唯一成员资格可以是原始集合的严格子集,也可以与原始集合相同(有替换 - 即重复)。

通过加权,您只需调整可能用于其他目的(例如采样、机器学习)的权重,以解决或施加与统一权重相关的某种(不)平衡。

我相信您指的是加权,但相同的答案应该适用于两种情况。如果观察的总数量是N,并且每个类的频率是 20 长向量 freq 的一个元素(例如,类 1 中的项目数是 freq[1]*N),那么只需使用权重向量1/freq 标准化权重。您可以通过一些常数来缩放它,例如N,虽然没关系。如果任何频率为 0 或非常接近它,您可以通过使用平滑计数向量来解决此问题(例如,Good-Turing 平滑)。

因此,每组都将占总重量的相等比例。

【讨论】:

  • 这不是批评,因为 OP 是如此模糊,但我想补充一点,在某些统计学习设置(例如 bagging、随机森林)中,类似的效果 is有时通过采样实现。例如,获取每个类的平衡子样本(有或没有替换)来构建森林中的每棵树。
  • 没错;它还扩展到几乎所有的统计学习方法(毕竟,训练集是一个样本;))。如果 OP 允许使用替换进行采样会更容易,但不会丢弃任何实例,因此需要对样本(用于建模)或过度采样进行过度加权。在任何一种情况下,似乎都需要加权方案。
猜你喜欢
  • 2020-12-30
  • 2015-01-31
  • 2018-08-21
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 2014-02-24
  • 1970-01-01
相关资源
最近更新 更多