【问题标题】:Using tidymodels' SMOTE with dummies for categorical variables使用 tidymodels 的 SMOTE 和虚拟变量作为分类变量
【发布时间】:2021-11-30 08:13:33
【问题描述】:

我正在处理一个严重不平衡的响应变量,因此我的主管建议我使用 SMOTE 来对我的数据集中的少数观察进行上采样。数据由许多分类预测变量组成,据我了解,themis::step_smote 来自 tidymodels 生态系统到目前为止只接受数字特征。

我知道我可以使用recipe::step_dummies 将我的因子和字符串转换为数字假人,但我担心综合观察会为这些假人创建没有任何逻辑意义的值(0 到 1 之间的值,其中逻辑上只有 0 和 1 是可能的)。

这是一个合理的问题,还是我可以继续在分类假人上使用 SMOTE?

【问题讨论】:

  • 我相信这是您最终可能会得到的结果,并且取决于您使用的模型估计和确切的不平衡,这可能是一个问题吗?我还没有看到这种情况对预测环境中的结果造成问题。如果您确实遇到问题,您可能会考虑使用 ROSE 算法。这是开发版中的also available in themis and no longer requires all numeric features
  • 非常感谢您的回答。我会试试 ROSE,看看结果如何。

标签: r recipe tidymodels smote


【解决方案1】:

您应该就分类数据调用step_smote()here is an example。请注意,step_dummy() 会为所有名义变量调用除了died

【讨论】:

  • 我知道这篇博文,但如果在虚拟变量上调用 SMOTE 在系统上是合理的,它并不能回答我的问题。
  • Here 是由step_smote() 设置的smote() 函数的参考页面。您要上采样的类应该是一个因素,所有其他类都应该是数字(又名,在调用step_smote() 之前调用step_dummy())。您不想在已更改为虚拟变量的内容上使用 step_smote()
  • 我想你误解了我的问题。我知道如何应用配方步骤,这不是问题。我想知道的是,如果事先将某些特征转换为虚拟变量,使用 SMOTE 是否有问题,因为它可能会为那些没有任何逻辑意义的虚拟变量生成十进制值。这都是关于特征,而不是因子响应。
  • 如果您使用的是二元分类器,可能没问题,但对于多类分类,绝对不行。 Smote 将对列中调用的少数类进行上采样,但是当您创建虚拟变量时,会为每个类创建一个新列(值为 1 或 0)。无论如何,对于 tidymodels 实现,themis 包旨在与因子列一起使用。我绝对建议使用因子方法来避免任何意外后果!
  • 我不是在谈论多类分类,这都是关于分类特征的。不过没关系,我会自己解决的。感谢您的尝试,即使我们彼此交谈过。
猜你喜欢
  • 2021-01-01
  • 2020-06-22
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 2013-04-14
  • 2011-03-24
相关资源
最近更新 更多